fix: align WebDAV MOVE overwrite and source errors

This commit is contained in:
OpenClaw Agent
2026-09-21 20:31:44 +08:00
parent 769c7f205e
commit 556b15a4c3
+13 -2
View File
@@ -914,9 +914,11 @@ func (f *webdavStorageFS) Copy(ctx context.Context, name, dest string, opts *web
func (f *webdavStorageFS) Move(ctx context.Context, name, dest string, opts *webdav.MoveOptions) (bool, error) { func (f *webdavStorageFS) Move(ctx context.Context, name, dest string, opts *webdav.MoveOptions) (bool, error) {
src := davStoragePath(name) src := davStoragePath(name)
dst := davStoragePath(dest) dst := davStoragePath(dest)
if opts != nil && opts.NoOverwrite { if opts == nil || opts.NoOverwrite {
if _, err := f.store.Stat(dst); err == nil { if _, err := f.store.Stat(dst); err == nil {
return false, fmt.Errorf("destination exists") return false, webdav.NewHTTPError(http.StatusPreconditionFailed, fmt.Errorf("destination exists"))
} else if !os.IsNotExist(err) {
return false, err
} }
} }
if m, ok := f.store.(storage.Multi); ok { if m, ok := f.store.(storage.Multi); ok {
@@ -926,7 +928,16 @@ func (f *webdavStorageFS) Move(ctx context.Context, name, dest string, opts *web
return false, webdav.NewHTTPError(http.StatusForbidden, fmt.Errorf("cross-root move is not supported")) return false, webdav.NewHTTPError(http.StatusForbidden, fmt.Errorf("cross-root move is not supported"))
} }
} }
if _, err := f.store.Stat(src); err != nil {
if os.IsNotExist(err) {
return false, webdav.NewHTTPError(http.StatusNotFound, err)
}
return false, err
}
if err := f.store.Rename(src, dst); err != nil { if err := f.store.Rename(src, dst); err != nil {
if os.IsNotExist(err) {
return false, webdav.NewHTTPError(http.StatusNotFound, err)
}
return false, webdav.NewHTTPError(http.StatusForbidden, err) return false, webdav.NewHTTPError(http.StatusForbidden, err)
} }
return true, nil return true, nil