diff options
Diffstat (limited to 'modules/core/virtual-fs.js')
| -rw-r--r-- | modules/core/virtual-fs.js | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/modules/core/virtual-fs.js b/modules/core/virtual-fs.js index 3ed1b40..3a3e119 100644 --- a/modules/core/virtual-fs.js +++ b/modules/core/virtual-fs.js @@ -686,6 +686,11 @@ class VirtualFileSystem { if (!dst || !dst.name) return false; const node = src.dir.content[src.name]; if (!node) return false; + // mv a a is a no-op, not a delete (assign-then-delete on the same key used to erase it) + if (src.dir === dst.dir && src.name === dst.name) return true; + const existing = dst.dir.content[dst.name]; + // Never clobber a directory node: its children would vanish with it (MAINT-010). + if (existing && existing.type === 'dir' && !existing._virtual) return false; dst.dir.content[dst.name] = node; delete src.dir.content[src.name]; this.saveToStorage(); @@ -701,6 +706,9 @@ class VirtualFileSystem { if (!dst || !dst.name) return false; const node = src.dir.content[src.name]; if (!node) return false; + const existing = dst.dir.content[dst.name]; + // Never clobber a directory node: its children would vanish with it (MAINT-010). + if (existing && existing.type === 'dir' && !existing._virtual) return false; dst.dir.content[dst.name] = JSON.parse(JSON.stringify(node)); this.saveToStorage(); this._emitChange(dstPath); |