Browse Source
Fix: http rename move dir to subdir (#4432)
Co-authored-by: wang wusong <wangwusong@virtaitech.com>
pull/4439/head
wusong
2 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with
11 additions and
4 deletions
-
weed/filer/filer_rename.go
-
weed/server/filer_grpc_server_rename.go
|
|
@ -2,16 +2,23 @@ package filer |
|
|
|
|
|
|
|
import ( |
|
|
|
"fmt" |
|
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
|
"strings" |
|
|
|
|
|
|
|
"github.com/seaweedfs/seaweedfs/weed/util" |
|
|
|
) |
|
|
|
|
|
|
|
func (f *Filer) CanRename(source, target util.FullPath) error { |
|
|
|
func (f *Filer) CanRename(source, target util.FullPath, oldName string) error { |
|
|
|
sourcePath := source.Child(oldName) |
|
|
|
if strings.HasPrefix(string(target), string(sourcePath)) { |
|
|
|
return fmt.Errorf("mv: can not move directory to a subdirectory of itself") |
|
|
|
} |
|
|
|
|
|
|
|
sourceBucket := f.DetectBucket(source) |
|
|
|
targetBucket := f.DetectBucket(target) |
|
|
|
if sourceBucket != targetBucket { |
|
|
|
return fmt.Errorf("can not move across collection %s => %s", sourceBucket, targetBucket) |
|
|
|
} |
|
|
|
|
|
|
|
return nil |
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -19,7 +19,7 @@ func (fs *FilerServer) AtomicRenameEntry(ctx context.Context, req *filer_pb.Atom |
|
|
|
oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory)) |
|
|
|
newParent := util.FullPath(filepath.ToSlash(req.NewDirectory)) |
|
|
|
|
|
|
|
if err := fs.filer.CanRename(oldParent, newParent); err != nil { |
|
|
|
if err := fs.filer.CanRename(oldParent, newParent, req.OldName); err != nil { |
|
|
|
return nil, err |
|
|
|
} |
|
|
|
|
|
|
@ -55,7 +55,7 @@ func (fs *FilerServer) StreamRenameEntry(req *filer_pb.StreamRenameEntryRequest, |
|
|
|
oldParent := util.FullPath(filepath.ToSlash(req.OldDirectory)) |
|
|
|
newParent := util.FullPath(filepath.ToSlash(req.NewDirectory)) |
|
|
|
|
|
|
|
if err := fs.filer.CanRename(oldParent, newParent); err != nil { |
|
|
|
if err := fs.filer.CanRename(oldParent, newParent, req.OldName); err != nil { |
|
|
|
return err |
|
|
|
} |
|
|
|
|
|
|
|