mirror of
https://github.com/rclone/rclone.git
synced 2026-01-08 11:33:33 +00:00
feat: add multiple paths support to --compare-dest and --copy-dest flag
This commit is contained in:
@@ -70,7 +70,7 @@ type syncCopyMove struct {
|
||||
trackRenamesWg sync.WaitGroup // wg for background track renames
|
||||
trackRenamesCh chan fs.Object // objects are pumped in here
|
||||
renameCheck []fs.Object // accumulate files to check for rename here
|
||||
compareCopyDest fs.Fs // place to check for files to server-side copy
|
||||
compareCopyDest []fs.Fs // place to check for files to server side copy
|
||||
backupDir fs.Fs // place to store overwrites/deletes
|
||||
checkFirst bool // if set run all the checkers before starting transfers
|
||||
}
|
||||
@@ -212,13 +212,13 @@ func newSyncCopyMove(ctx context.Context, fdst, fsrc fs.Fs, deleteMode fs.Delete
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
if ci.CompareDest != "" {
|
||||
if len(ci.CompareDest) > 0 {
|
||||
var err error
|
||||
s.compareCopyDest, err = operations.GetCompareDest(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
} else if ci.CopyDest != "" {
|
||||
} else if len(ci.CopyDest) > 0 {
|
||||
var err error
|
||||
s.compareCopyDest, err = operations.GetCopyDest(ctx, fdst)
|
||||
if err != nil {
|
||||
@@ -890,7 +890,7 @@ func (s *syncCopyMove) run() error {
|
||||
// Delete empty fsrc subdirectories
|
||||
// if DoMove and --delete-empty-src-dirs flag is set
|
||||
if s.DoMove && s.deleteEmptySrcDirs {
|
||||
//delete empty subdirectories that were part of the move
|
||||
// delete empty subdirectories that were part of the move
|
||||
s.processError(s.deleteEmptyDirectories(s.ctx, s.fsrc, s.srcEmptyDirs))
|
||||
}
|
||||
|
||||
|
||||
@@ -1480,9 +1480,9 @@ func TestSyncCompareDest(t *testing.T) {
|
||||
r := fstest.NewRun(t)
|
||||
defer r.Finalise()
|
||||
|
||||
ci.CompareDest = r.FremoteName + "/CompareDest"
|
||||
ci.CompareDest = []string{r.FremoteName + "/CompareDest"}
|
||||
defer func() {
|
||||
ci.CompareDest = ""
|
||||
ci.CompareDest = []string{}
|
||||
}()
|
||||
|
||||
fdst, err := fs.NewFs(ctx, r.FremoteName+"/dst")
|
||||
@@ -1562,6 +1562,40 @@ func TestSyncCompareDest(t *testing.T) {
|
||||
fstest.CheckItems(t, r.Fremote, file2, file3, file4, file5bdst)
|
||||
}
|
||||
|
||||
// Test with multiple CompareDest
|
||||
func TestSyncMultipleCompareDest(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
ci := fs.GetConfig(ctx)
|
||||
r := fstest.NewRun(t)
|
||||
defer r.Finalise()
|
||||
|
||||
ci.CompareDest = []string{r.FremoteName + "/pre-dest1", r.FremoteName + "/pre-dest2"}
|
||||
defer func() {
|
||||
ci.CompareDest = []string{}
|
||||
}()
|
||||
|
||||
// check empty dest, new compare
|
||||
fsrc1 := r.WriteFile("1", "1", t1)
|
||||
fsrc2 := r.WriteFile("2", "2", t1)
|
||||
fsrc3 := r.WriteFile("3", "3", t1)
|
||||
fstest.CheckItems(t, r.Flocal, fsrc1, fsrc2, fsrc3)
|
||||
|
||||
fdest1 := r.WriteObject(ctx, "pre-dest1/1", "1", t1)
|
||||
fdest2 := r.WriteObject(ctx, "pre-dest2/2", "2", t1)
|
||||
fstest.CheckItems(t, r.Fremote, fdest1, fdest2)
|
||||
|
||||
accounting.GlobalStats().ResetCounters()
|
||||
fdst, err := fs.NewFs(ctx, r.FremoteName+"/dest")
|
||||
require.NoError(t, err)
|
||||
require.NoError(t, Sync(ctx, fdst, r.Flocal, false))
|
||||
|
||||
fdest3 := fsrc3
|
||||
fdest3.Path = "dest/3"
|
||||
|
||||
fstest.CheckItems(t, fdst, fsrc3)
|
||||
fstest.CheckItems(t, r.Fremote, fdest1, fdest2, fdest3)
|
||||
}
|
||||
|
||||
// Test with CopyDest set
|
||||
func TestSyncCopyDest(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
@@ -1573,9 +1607,9 @@ func TestSyncCopyDest(t *testing.T) {
|
||||
t.Skip("Skipping test as remote does not support server-side copy")
|
||||
}
|
||||
|
||||
ci.CopyDest = r.FremoteName + "/CopyDest"
|
||||
ci.CopyDest = []string{r.FremoteName + "/CopyDest"}
|
||||
defer func() {
|
||||
ci.CopyDest = ""
|
||||
ci.CopyDest = []string{}
|
||||
}()
|
||||
|
||||
fdst, err := fs.NewFs(ctx, r.FremoteName+"/dst")
|
||||
|
||||
Reference in New Issue
Block a user