From 4d0ae6b1ef7603dc31688354b082555b01e5e814 Mon Sep 17 00:00:00 2001 From: Noah Hsu Date: Thu, 30 Jun 2022 22:54:45 +0800 Subject: [PATCH] fix: webdav move contains rename --- server/webdav/file.go | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/server/webdav/file.go b/server/webdav/file.go index 8b021c1d..4cb7d859 100644 --- a/server/webdav/file.go +++ b/server/webdav/file.go @@ -27,12 +27,26 @@ func slashClean(name string) string { // // See section 9.9.4 for when various HTTP status codes apply. func moveFiles(ctx context.Context, src, dst string, overwrite bool) (status int, err error) { - err = fs.Move(ctx, src, dst) + srcDir := path.Dir(src) + dstDir := path.Dir(dst) + srcName := path.Base(src) + dstName := path.Base(dst) + if srcDir == dstDir { + err = fs.Rename(ctx, src, dstName) + } else { + err = fs.Move(ctx, src, dstDir) + if err != nil { + return http.StatusInternalServerError, err + } + if srcName != dstName { + err = fs.Rename(ctx, path.Join(dstDir, srcName), dstName) + } + } if err != nil { return http.StatusInternalServerError, err } - fs.ClearCache(path.Dir(src)) - fs.ClearCache(path.Dir(dst)) + fs.ClearCache(srcDir) + fs.ClearCache(dstDir) // TODO if there are no files copy, should return 204 return http.StatusCreated, nil }