From 43760190620b45aeb0f9ff337af88623f6d6733d Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 21 Jan 2019 16:59:23 +0000 Subject: [PATCH] dedupe: Use walk.ListR for listing commands. This dramatically increases the speed (7x in my tests) of the de-dupe as google drive supports ListR directly and dedupe did not work with `--fast-list`. Fixes #2902 --- fs/operations/dedupe.go | 10 ++-------- fs/operations/dedupe_test.go | 5 +---- 2 files changed, 3 insertions(+), 12 deletions(-) diff --git a/fs/operations/dedupe.go b/fs/operations/dedupe.go index 8c6f5447f..081df9892 100644 --- a/fs/operations/dedupe.go +++ b/fs/operations/dedupe.go @@ -192,10 +192,7 @@ var _ pflag.Value = (*DeduplicateMode)(nil) // dedupeFindDuplicateDirs scans f for duplicate directories func dedupeFindDuplicateDirs(f fs.Fs) ([][]fs.Directory, error) { duplicateDirs := [][]fs.Directory{} - err := walk.Walk(f, "", true, fs.Config.MaxDepth, func(dirPath string, entries fs.DirEntries, err error) error { - if err != nil { - return err - } + err := walk.ListR(f, "", true, fs.Config.MaxDepth, walk.ListDirs, func(entries fs.DirEntries) error { dirs := map[string][]fs.Directory{} entries.ForDir(func(d fs.Directory) { dirs[d.Remote()] = append(dirs[d.Remote()], d) @@ -268,10 +265,7 @@ func Deduplicate(f fs.Fs, mode DeduplicateMode) error { // Now find duplicate files files := map[string][]fs.Object{} - err := walk.Walk(f, "", true, fs.Config.MaxDepth, func(dirPath string, entries fs.DirEntries, err error) error { - if err != nil { - return err - } + err := walk.ListR(f, "", true, fs.Config.MaxDepth, walk.ListObjects, func(entries fs.DirEntries) error { entries.ForObject(func(o fs.Object) { remote := o.Remote() files[remote] = append(files[remote], o) diff --git a/fs/operations/dedupe_test.go b/fs/operations/dedupe_test.go index bcb27f5dc..e5807bfac 100644 --- a/fs/operations/dedupe_test.go +++ b/fs/operations/dedupe_test.go @@ -161,10 +161,7 @@ func TestDeduplicateRename(t *testing.T) { err := operations.Deduplicate(r.Fremote, operations.DeduplicateRename) require.NoError(t, err) - require.NoError(t, walk.Walk(r.Fremote, "", true, -1, func(dirPath string, entries fs.DirEntries, err error) error { - if err != nil { - return err - } + require.NoError(t, walk.ListR(r.Fremote, "", true, -1, walk.ListObjects, func(entries fs.DirEntries) error { entries.ForObject(func(o fs.Object) { remote := o.Remote() if remote != "one-1.txt" &&