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 {
|
||||
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
|
||||
}
|
||||
|
||||
|
|
|
@ -776,3 +776,60 @@ func TestMemMapFsConfurrentMkdir(t *testing.T) {
|
|||
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