mirror of https://github.com/spf13/afero.git
parent
a800a9de53
commit
3b1116bc67
12
memmap.go
12
memmap.go
|
@ -319,6 +319,18 @@ func (m *MemMapFs) Rename(oldname, newname string) error {
|
||||||
} else {
|
} else {
|
||||||
return &os.PathError{Op: "rename", Path: oldname, Err: ErrFileNotFound}
|
return &os.PathError{Op: "rename", Path: oldname, Err: ErrFileNotFound}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for p, fileData := range m.getData() {
|
||||||
|
if strings.HasPrefix(p, oldname+FilePathSeparator) {
|
||||||
|
m.mu.RUnlock()
|
||||||
|
m.mu.Lock()
|
||||||
|
delete(m.getData(), p)
|
||||||
|
p := strings.Replace(p, oldname, newname, 1)
|
||||||
|
m.getData()[p] = fileData
|
||||||
|
m.mu.Unlock()
|
||||||
|
m.mu.RLock()
|
||||||
|
}
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -776,3 +776,60 @@ func TestMemMapFsConfurrentMkdir(t *testing.T) {
|
||||||
t.Errorf("found %d files, but expect %d", len(foundFiles), n)
|
t.Errorf("found %d files, but expect %d", len(foundFiles), n)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMemFsRenameDir(t *testing.T) {
|
||||||
|
const srcPath = "/src"
|
||||||
|
const dstPath = "/dst"
|
||||||
|
const subDir = "dir"
|
||||||
|
const subFile = "file.txt"
|
||||||
|
|
||||||
|
fs := NewMemMapFs()
|
||||||
|
|
||||||
|
err := fs.MkdirAll(srcPath+FilePathSeparator+subDir, 0777)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("MkDirAll failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
f, err := fs.Create(srcPath + FilePathSeparator + subFile)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Create failed: %s", err)
|
||||||
|
}
|
||||||
|
if err = f.Close(); err != nil {
|
||||||
|
t.Fatalf("Close failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fs.Rename(srcPath, dstPath)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Rename failed: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fs.Stat(srcPath + FilePathSeparator + subDir)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("SubDir still exists in the source dir")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fs.Stat(srcPath + FilePathSeparator + subFile)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("SubFile still exists in the source dir")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fs.Stat(dstPath + FilePathSeparator + subDir)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("SubDir stat in the destination dir: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = fs.Stat(dstPath + FilePathSeparator + subFile)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("SubFile stat in the destination dir: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fs.Mkdir(srcPath, 0777)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("Cannot recreate the source dir: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
err = fs.Mkdir(srcPath+FilePathSeparator+subDir, 0777)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Cannot recreate the subdir in the source dir: %s", err)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue