test_all: make -clean not give up on the first error

This commit is contained in:
Nick Craig-Wood 2019-02-07 11:29:52 +00:00
parent f5c853b5c8
commit 578d00666c

View File

@ -11,12 +11,13 @@ import (
"github.com/ncw/rclone/fs" "github.com/ncw/rclone/fs"
"github.com/ncw/rclone/fs/list" "github.com/ncw/rclone/fs/list"
"github.com/ncw/rclone/fs/operations" "github.com/ncw/rclone/fs/operations"
"github.com/pkg/errors"
) )
// MatchTestRemote matches the remote names used for testing (copied // MatchTestRemote matches the remote names used for testing (copied
// from fstest/fstest.go so we don't have to import that and get all // from fstest/fstest.go so we don't have to import that and get all
// its flags) // its flags)
var MatchTestRemote = regexp.MustCompile(`^rclone-test-[abcdefghijklmnopqrstuvwxyz0123456789]{24}$`) var MatchTestRemote = regexp.MustCompile(`^rclone-test-[abcdefghijklmnopqrstuvwxyz0123456789]{24}(_segments)?$`)
// cleanFs runs a single clean fs for left over directories // cleanFs runs a single clean fs for left over directories
func cleanFs(remote string) error { func cleanFs(remote string) error {
@ -28,7 +29,8 @@ func cleanFs(remote string) error {
if err != nil { if err != nil {
return err return err
} }
return entries.ForDirError(func(dir fs.Directory) error { var lastErr error
err = entries.ForDirError(func(dir fs.Directory) error {
dirPath := dir.Remote() dirPath := dir.Remote()
fullPath := remote + dirPath fullPath := remote + dirPath
if MatchTestRemote.MatchString(dirPath) { if MatchTestRemote.MatchString(dirPath) {
@ -39,12 +41,25 @@ func cleanFs(remote string) error {
log.Printf("Purging %s", fullPath) log.Printf("Purging %s", fullPath)
dir, err := fs.NewFs(fullPath) dir, err := fs.NewFs(fullPath)
if err != nil { if err != nil {
return err err = errors.Wrap(err, "NewFs failed")
lastErr = err
fs.Errorf(fullPath, "%v", err)
return nil
}
err = operations.Purge(dir, "")
if err != nil {
err = errors.Wrap(err, "Purge failed")
lastErr = err
fs.Errorf(dir, "%v", err)
return nil
} }
return operations.Purge(dir, "")
} }
return nil return nil
}) })
if err != nil {
return err
}
return lastErr
} }
// cleanRemotes cleans the list of remotes passed in // cleanRemotes cleans the list of remotes passed in