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.js8
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);