From 4001e21624b59210e77b8fdfe4cb2e7ea0d0deb9 Mon Sep 17 00:00:00 2001 From: Nick Craig-Wood Date: Mon, 12 Sep 2016 15:42:57 +0100 Subject: [PATCH] Make sure high level retries show with -q - fixes #648 Also update the exit code documentation describing that. --- cmd/cmd.go | 11 +++++++---- docs/content/docs.md | 17 ++++++++++++++--- rclone.go | 7 ++----- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/cmd/cmd.go b/cmd/cmd.go index 0e23d2373..64a6eafa1 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -161,20 +161,23 @@ func Run(Retry bool, cmd *cobra.Command, f func() error) { for try := 1; try <= *retries; try++ { err = f() if !Retry || (err == nil && !fs.Stats.Errored()) { + if try > 1 { + fs.ErrorLog(nil, "Attempt %d/%d succeeded", try, *retries) + } break } if fs.IsFatalError(err) { - fs.Log(nil, "Fatal error received - not attempting retries") + fs.ErrorLog(nil, "Fatal error received - not attempting retries") break } if fs.IsNoRetryError(err) { - fs.Log(nil, "Can't retry this error - not attempting retries") + fs.ErrorLog(nil, "Can't retry this error - not attempting retries") break } if err != nil { - fs.Log(nil, "Attempt %d/%d failed with %d errors and: %v", try, *retries, fs.Stats.GetErrors(), err) + fs.ErrorLog(nil, "Attempt %d/%d failed with %d errors and: %v", try, *retries, fs.Stats.GetErrors(), err) } else { - fs.Log(nil, "Attempt %d/%d failed with %d errors", try, *retries, fs.Stats.GetErrors()) + fs.ErrorLog(nil, "Attempt %d/%d failed with %d errors", try, *retries, fs.Stats.GetErrors()) } if try < *retries { fs.Stats.ResetErrors() diff --git a/docs/content/docs.md b/docs/content/docs.md index 04086bd3a..3f5392f81 100644 --- a/docs/content/docs.md +++ b/docs/content/docs.md @@ -629,7 +629,18 @@ If you use the `--log-file=FILE` option, rclone will redirect `Error`, Exit Code --------- -If any errors occurred during the command, rclone will set a non zero -exit code. This allows scripts to detect when rclone operations have -failed. +If any errors occurred during the command, rclone with an exit code of +`1`. This allows scripts to detect when rclone operations have failed. +During the startup phase rclone will exit immediately if an error is +detected in the configuration. There will always be a log message +immediately before exiting. + +When rclone is running it will accumulate errors as it goes along, and +only exit with an non-zero exit code if (after retries) there were no +transfers with errors remaining. For every error counted there will +be a high priority log message (visibile with `-q`) showing the +message and which file caused the problem. A high priority message is +also shown when starting a retry so the user can see that any previous +error messages may not be valid after the retry. If rclone has done a +retry it will log a high priority message if the retry was successful. diff --git a/rclone.go b/rclone.go index c88d94d7b..873b9f96c 100644 --- a/rclone.go +++ b/rclone.go @@ -4,8 +4,7 @@ package main import ( - "fmt" - "os" + "log" "github.com/ncw/rclone/cmd" _ "github.com/ncw/rclone/cmd/all" // import all commands @@ -14,8 +13,6 @@ import ( func main() { if err := cmd.Root.Execute(); err != nil { - fmt.Println(err) - os.Exit(-1) + log.Fatalf("Fatal error: %v", err) } - os.Exit(0) }