aboutsummaryrefslogtreecommitdiff
path: root/modules/core/virtual-fs.js
diff options
context:
space:
mode:
Diffstat (limited to 'modules/core/virtual-fs.js')
-rw-r--r--modules/core/virtual-fs.js23
1 files changed, 17 insertions, 6 deletions
diff --git a/modules/core/virtual-fs.js b/modules/core/virtual-fs.js
index a52a393..e639cba 100644
--- a/modules/core/virtual-fs.js
+++ b/modules/core/virtual-fs.js
@@ -546,8 +546,11 @@ class VirtualFileSystem {
size: dir.content[name]._factory ? 0 : (dir.content[name].content ? dir.content[name].content.length : 0),
_virtual: !!dir.content[name]._virtual
}));
- // Inject virtual /sys/ at root level
- if ((!path || path === '/' || path === '') && !entries.some(e => e.name === 'sys' && e._virtual)) {
+ // Inject virtual /sys/ — but ONLY when the directory being listed IS the root.
+ // The old test was on the argument (`!path`), not on the result: `cd _agents; ls`
+ // printed a phantom `sys` inside _agents, and a follow-up list_files('_agents/sys')
+ // failed with 'Directory not found'. The listing lied; the resolver was right.
+ if (dir === this.root && !entries.some(e => e.name === 'sys' && e._virtual)) {
entries.push({ name: 'sys', type: 'dir', size: 0, _virtual: true });
}
return entries;
@@ -763,8 +766,11 @@ class VirtualFileSystem {
size: dir.content[name]._factory ? 0 : (dir.content[name].content ? dir.content[name].content.length : 0),
_virtual: !!dir.content[name]._virtual
}));
- // Inject virtual /sys/ at root level
- if ((!path || path === '/' || path === '') && !entries.some(e => e.name === 'sys' && e._virtual)) {
+ // Inject virtual /sys/ — but ONLY when the directory being listed IS the root.
+ // The old test was on the argument (`!path`), not on the result: `cd _agents; ls`
+ // printed a phantom `sys` inside _agents, and a follow-up list_files('_agents/sys')
+ // failed with 'Directory not found'. The listing lied; the resolver was right.
+ if (dir === this.root && !entries.some(e => e.name === 'sys' && e._virtual)) {
entries.push({ name: 'sys', type: 'dir', size: 0, _virtual: true });
}
return entries;
@@ -802,9 +808,14 @@ class VirtualFileSystem {
const isLast = i === entries.length - 1;
const connector = isLast ? '└── ' : '├── ';
result += prefix + connector + name + '\n';
- if (dir.content[name].type === 'dir' || dir.content[name]._virtual) {
+ // The loop pushes the virtual 'sys' name into `entries`, which has no node behind it:
+ // dereferencing dir.content['sys'].type threw 'Cannot read properties of undefined'
+ // and `tree` died on the root listing — often after printing a partial tree, which is
+ // where the disagreeing file counts came from.
+ const child = dir.content[name];
+ if (child && child.type === 'dir') {
const ext = isLast ? ' ' : '│ ';
- result += this.tree(path + '/' + name, prefix + ext);
+ result += this.tree((path || '') + '/' + name, prefix + ext);
}
}
return result;