Remove FileExists error in MemMapFs.Rename when destination file exists, because os.Rename also doesn't return the error
diff --git a/afero_test.go b/afero_test.go
index 6c9c64b..26e23cd 100644
--- a/afero_test.go
+++ b/afero_test.go
@@ -194,20 +194,39 @@
tDir := testDir(fs)
from := filepath.Join(tDir, "/renamefrom")
to := filepath.Join(tDir, "/renameto")
+ exists := filepath.Join(tDir, "/renameexists")
file, err := fs.Create(from)
if err != nil {
- t.Fatalf("open %q failed: %v", to, err)
+ t.Fatalf("%s: open %q failed: %v", fs.Name(), to, err)
}
if err = file.Close(); err != nil {
- t.Errorf("close %q failed: %v", to, err)
+ t.Errorf("%s: close %q failed: %v", fs.Name(), to, err)
+ }
+ file, err = fs.Create(exists)
+ if err != nil {
+ t.Fatalf("%s: open %q failed: %v", fs.Name(), to, err)
+ }
+ if err = file.Close(); err != nil {
+ t.Errorf("%s: close %q failed: %v", fs.Name(), to, err)
}
err = fs.Rename(from, to)
if err != nil {
- t.Fatalf("rename %q, %q failed: %v", to, from, err)
+ t.Fatalf("%s: rename %q, %q failed: %v", fs.Name(), to, from, err)
+ }
+ file, err = fs.Create(from)
+ if err != nil {
+ t.Fatalf("%s: open %q failed: %v", fs.Name(), to, err)
+ }
+ if err = file.Close(); err != nil {
+ t.Errorf("%s: close %q failed: %v", fs.Name(), to, err)
+ }
+ err = fs.Rename(from, exists)
+ if err != nil {
+ t.Errorf("%s: rename %q, %q failed: %v", fs.Name(), exists, from, err)
}
names, err := readDirNames(fs, tDir)
if err != nil {
- t.Fatalf("readDirNames error: %v", err)
+ t.Errorf("%s: readDirNames error: %v", fs.Name(), err)
}
found := false
for _, e := range names {
@@ -224,7 +243,7 @@
_, err = fs.Stat(to)
if err != nil {
- t.Errorf("stat %q failed: %v", to, err)
+ t.Errorf("%s: stat %q failed: %v", fs.Name(), to, err)
}
}
}
diff --git a/memmap.go b/memmap.go
index 2f2c612..21fbe67 100644
--- a/memmap.go
+++ b/memmap.go
@@ -278,20 +278,16 @@
m.mu.RLock()
defer m.mu.RUnlock()
if _, ok := m.getData()[oldname]; ok {
- if _, ok := m.getData()[newname]; !ok {
- m.mu.RUnlock()
- m.mu.Lock()
- m.unRegisterWithParent(oldname)
- fileData := m.getData()[oldname]
- delete(m.getData(), oldname)
- mem.ChangeFileName(fileData, newname)
- m.getData()[newname] = fileData
- m.registerWithParent(fileData)
- m.mu.Unlock()
- m.mu.RLock()
- } else {
- return &os.PathError{"rename", newname, ErrDestinationExists}
- }
+ m.mu.RUnlock()
+ m.mu.Lock()
+ m.unRegisterWithParent(oldname)
+ fileData := m.getData()[oldname]
+ delete(m.getData(), oldname)
+ mem.ChangeFileName(fileData, newname)
+ m.getData()[newname] = fileData
+ m.registerWithParent(fileData)
+ m.mu.Unlock()
+ m.mu.RLock()
} else {
return &os.PathError{"rename", oldname, ErrFileNotFound}
}