commit 863d29a72e6648802adb0910d92fa771531daf41
parent 9b797902a3b75b080e876cc6024ca7b157860ce9
Author: Sean Enck <sean@ttypty.com>
Date: Tue, 11 Jul 2023 18:47:56 -0400
disallow globbing in moves beyond leaf level
Diffstat:
4 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/internal/app/move.go b/internal/app/move.go
@@ -39,8 +39,13 @@ func Move(cmd CommandOptions) error {
if !backend.IsDirectory(dst) {
return fmt.Errorf("%s must be a path, not an entry", dst)
}
+ srcDir := backend.Directory(src)
dir := backend.Directory(dst)
for _, e := range m {
+ srcPath := backend.Directory(e.Path)
+ if srcPath != srcDir {
+ return fmt.Errorf("multiple moves can only be done at a leaf level")
+ }
r := moveRequest{cmd: cmd, src: e.Path, dst: backend.NewPath(dir, backend.Base(e.Path)), overwrite: false}
if err := r.do(true, true); err != nil {
return err
diff --git a/internal/app/move_test.go b/internal/app/move_test.go
@@ -68,6 +68,10 @@ func TestMove(t *testing.T) {
if err := app.Move(m); err.Error() != "test/test2/test3 must be a path, not an entry" {
t.Errorf("invalid error: %v", err)
}
+ m.args = []string{"test/*", "test/test2/"}
+ if err := app.Move(m); err.Error() != "multiple moves can only be done at a leaf level" {
+ t.Errorf("invalid error: %v", err)
+ }
m.args = []string{"test/test3/*", "test/test2/"}
if err := app.Move(m); err.Error() != "unable to overwrite entries when moving multiple items" {
t.Errorf("invalid error: %v", err)
diff --git a/internal/cli/doc.txt b/internal/cli/doc.txt
@@ -16,7 +16,7 @@ listed)
For 'mv' the destination must NOT be an entry but the final destination
location for all matched entries. Overwriting is not allowed by moving
-via glob.
+via glob and moving via globs can ONLY be done via leaf level globs.
Examples:
diff --git a/tests/expected.log b/tests/expected.log
@@ -62,23 +62,24 @@ delete entry? (y/N)
delete entry? (y/N) unable to remove: no entities given
+multiple moves can only be done at a leaf level
unable to get destination object
unable to overwrite entries when moving multiple items
keys/k/one2
keyx/d/e
+move/m/ka/abc
+move/m/ka/xyz
move/ma/ka2/zzz
move/ma/ka3/yyy
move/ma/ka3/zzz
-move/mac/abc
-move/mac/xyz
move/mac/yyy
move/mac/zzz
selected entities:
+ move/m/ka/abc
+ move/m/ka/xyz
move/ma/ka2/zzz
move/ma/ka3/yyy
move/ma/ka3/zzz
- move/mac/abc
- move/mac/xyz
move/mac/yyy
move/mac/zzz