github.com/10XDev/rclone@v1.52.3-0.20200626220027-16af9ab76b2a/fstest/test_all/clean.go (about) 1 // Clean the left over test files 2 3 package main 4 5 import ( 6 "context" 7 "log" 8 "regexp" 9 10 "github.com/pkg/errors" 11 "github.com/rclone/rclone/fs" 12 "github.com/rclone/rclone/fs/list" 13 "github.com/rclone/rclone/fs/operations" 14 ) 15 16 // MatchTestRemote matches the remote names used for testing (copied 17 // from fstest/fstest.go so we don't have to import that and get all 18 // its flags) 19 var MatchTestRemote = regexp.MustCompile(`^rclone-test-[abcdefghijklmnopqrstuvwxyz0123456789]{24}(_segments)?$`) 20 21 // cleanFs runs a single clean fs for left over directories 22 func cleanFs(ctx context.Context, remote string, cleanup bool) error { 23 f, err := fs.NewFs(remote) 24 if err != nil { 25 return err 26 } 27 var lastErr error 28 if cleanup { 29 log.Printf("%q - running cleanup", remote) 30 err = operations.CleanUp(ctx, f) 31 if err != nil { 32 lastErr = err 33 fs.Errorf(f, "Cleanup failed: %v", err) 34 } 35 } 36 entries, err := list.DirSorted(ctx, f, true, "") 37 if err != nil { 38 return err 39 } 40 err = entries.ForDirError(func(dir fs.Directory) error { 41 dirPath := dir.Remote() 42 fullPath := remote + dirPath 43 if MatchTestRemote.MatchString(dirPath) { 44 if *dryRun { 45 log.Printf("Not Purging %s - -dry-run", fullPath) 46 return nil 47 } 48 log.Printf("Purging %s", fullPath) 49 dir, err := fs.NewFs(fullPath) 50 if err != nil { 51 err = errors.Wrap(err, "NewFs failed") 52 lastErr = err 53 fs.Errorf(fullPath, "%v", err) 54 return nil 55 } 56 err = operations.Purge(ctx, dir, "") 57 if err != nil { 58 err = errors.Wrap(err, "Purge failed") 59 lastErr = err 60 fs.Errorf(dir, "%v", err) 61 return nil 62 } 63 } 64 return nil 65 }) 66 if err != nil { 67 return err 68 } 69 return lastErr 70 } 71 72 // cleanRemotes cleans the list of remotes passed in 73 func cleanRemotes(conf *Config) error { 74 var lastError error 75 for _, backend := range conf.Backends { 76 remote := backend.Remote 77 log.Printf("%q - Cleaning", remote) 78 err := cleanFs(context.Background(), remote, backend.CleanUp) 79 if err != nil { 80 lastError = err 81 log.Printf("Failed to purge %q: %v", remote, err) 82 } 83 } 84 return lastError 85 }