Merge pull request #22 from mbertschler/fix-rename
Fix MemMapFs.Rename()
diff --git a/fs_test.go b/fs_test.go
index 0097335..79cda90 100644
--- a/fs_test.go
+++ b/fs_test.go
@@ -143,6 +143,22 @@
if err != nil {
t.Fatalf("rename %q, %q failed: %v", to, from, err)
}
+ names, err := readDirNames(testDir, fs)
+ if err != nil {
+ t.Fatalf("readDirNames error: %v", err)
+ }
+ found := false
+ for _, e := range names {
+ if e == "renamefrom" {
+ t.Error("File is still called renamefrom")
+ }
+ if e == "renameto" {
+ found = true
+ }
+ }
+ if !found {
+ t.Error("File was not renamed to renameto")
+ }
defer fs.Remove(to)
_, err = fs.Stat(to)
if err != nil {
@@ -512,9 +528,6 @@
}
func findNames(t *testing.T, root, sub []string, fs Fs) {
- t.Logf("Names root: %v", root)
- t.Logf("Names sub: %v", sub)
-
var foundRoot bool
for _, e := range root {
_, err := fs.Open(path.Join(testDir, e))
@@ -526,6 +539,8 @@
}
}
if !foundRoot {
+ t.Logf("Names root: %v", root)
+ t.Logf("Names sub: %v", sub)
t.Error("Didn't find subdirectory we")
}
@@ -544,9 +559,13 @@
}
if !found1 {
+ t.Logf("Names root: %v", root)
+ t.Logf("Names sub: %v", sub)
t.Error("Didn't find testfile1")
}
if !found2 {
+ t.Logf("Names root: %v", root)
+ t.Logf("Names sub: %v", sub)
t.Error("Didn't find testfile2")
}
}
diff --git a/memmap.go b/memmap.go
index 8a0e3be..3bf85f7 100644
--- a/memmap.go
+++ b/memmap.go
@@ -293,8 +293,12 @@
if _, ok := m.getData()[newname]; !ok {
m.runlock()
m.lock()
- m.getData()[newname] = m.getData()[oldname]
+ m.unRegisterWithParent(oldname)
+ file := m.getData()[oldname].(*InMemoryFile)
delete(m.getData(), oldname)
+ file.name = newname
+ m.getData()[newname] = file
+ m.registerWithParent(file)
m.unlock()
m.rlock()
} else {