8000 When removing or renaming a folder, subfiles/folders of the path was … · etherscan-io/sftp@67f906c · GitHub
[go: up one dir, main page]

Skip to content

Commit 67f906c

Browse files
Daniel FletcherDaniel Fletcher
authored andcommitted
When removing or renaming a folder, subfiles/folders of the path was not being updated
1 parent 84e6527 commit 67f906c

File tree

1 file changed

+27
-1
lines changed

1 file changed

+27
-1
lines changed

request-example.go

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11, 10000 7 @@ import (
1111
"os"
1212
"path/filepath"
1313
"sort"
14+
"strings"
1415
"sync"
1516
"syscall"
1617
"time"
@@ -90,11 +91,36 @@ func (fs *root) Filecmd(r *Request) error {
9091
file.name = r.Target
9192
fs.files[r.Target] = file
9293
delete(fs.files, r.Filepath)
94+
95+
if file.IsDir() {
96+
fmt.Printf("Rename Dir %v, %v, %v\n", r.Target, file.name, r.Filepath)
97+
for path, file := range fs.files {
98+
if strings.HasPrefix(path, r.Filepath+"/") {
99+
fmt.Printf("renaming %v from %v to %v\n", file.name, path, r.Target+path[len(r.Filepath):])
100+
file.name = r.Target + path[len(r.Filepath):]
101+
fs.files[r.Target+path[len(r.Filepath):]] = file
102+
delete(fs.files, path)
103+
}
104+
}
105+
}
93106
case "Rmdir", "Remove":
94-
_, err := fs.fetch(filepath.Dir(r.Filepath))
107+
file, err := fs.fetch(filepath.Dir(r.Filepath))
95108
if err != nil {
96109
return err
97110
}
111+
112+
if file.IsDir() {
113+
for path := range fs.files {
114+
if strings.HasPrefix(path, r.Filepath+"/") {
115+
return &os.PathError{
116+
Op: "remove",
117+
Path: r.Filepath + "/",
118+
Err: fmt.Errorf("directory is not empty"),
119+
}
120+
}
121+
}
122+
}
123+
98124
delete(fs.files, r.Filepath)
99125
case "Mkdir":
100126
_, err := fs.fetch(filepath.Dir(r.Filepath))

0 commit comments

Comments
 (0)
0