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

Skip to content

Commit b4e1be7

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 b4e1be7

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

request-example.go

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"os"
1212
"path/filepath"
1313
"sort"
14+
"strings"
1415
"sync"
1516
"syscall"
1617
"time"
@@ -90,12 +91,32 @@ 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
}
98111
delete(fs.files, r.Filepath)
112+
113+
if file.IsDir() {
114+
for path := range fs.files {
115+
if strings.HasPrefix(path, r.Filepath+"/") {
116+
delete(fs.files, path)
117+
}
118+
}
119+
}
99120
case "Mkdir":
100121
_, err := fs.fetch(filepath.Dir(r.Filepath))
101122
if err != nil {

0 commit comments

Comments
 (0)
0