mirror of
https://github.com/rclone/rclone.git
synced 2025-01-09 15:58:28 +01:00
cmd: add --error-on-no-transfer option
This allows rclone to exit with a non-zero return code if no files are transferred. This is useful when calling rclone as part of a workflow/script pipeline as it allows the end user to stop processing if no files have been transferred. NB: Enabling this option will return in rclone exiting non-zero if there are no transfers. Depending on how your're currently using rclone in your scripts, this may break existing setups!
This commit is contained in:
parent
e2bf91452a
commit
53874bd8ee
@ -66,6 +66,7 @@ const (
|
|||||||
exitCodeNoRetryError
|
exitCodeNoRetryError
|
||||||
exitCodeFatalError
|
exitCodeFatalError
|
||||||
exitCodeTransferExceeded
|
exitCodeTransferExceeded
|
||||||
|
exitCodeNoFilesTransferred
|
||||||
)
|
)
|
||||||
|
|
||||||
// ShowVersion prints the version to stdout
|
// ShowVersion prints the version to stdout
|
||||||
@ -312,6 +313,7 @@ func Run(Retry bool, showStats bool, cmd *cobra.Command, f func() error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
resolveExitCode(cmdErr)
|
resolveExitCode(cmdErr)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// CheckArgs checks there are enough arguments and prints a message if not
|
// CheckArgs checks there are enough arguments and prints a message if not
|
||||||
@ -430,6 +432,11 @@ func initConfig() {
|
|||||||
func resolveExitCode(err error) {
|
func resolveExitCode(err error) {
|
||||||
atexit.Run()
|
atexit.Run()
|
||||||
if err == nil {
|
if err == nil {
|
||||||
|
if fs.Config.ErrorOnNoTransfer {
|
||||||
|
if accounting.GlobalStats().GetTransfers() == 0 {
|
||||||
|
os.Exit(exitCodeNoFilesTransferred)
|
||||||
|
}
|
||||||
|
}
|
||||||
os.Exit(exitCodeSuccess)
|
os.Exit(exitCodeSuccess)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -553,6 +553,18 @@ the time to send the request header.
|
|||||||
|
|
||||||
The default is `1s`. Set to 0 to disable.
|
The default is `1s`. Set to 0 to disable.
|
||||||
|
|
||||||
|
### --error-on-no-transfer ###
|
||||||
|
|
||||||
|
By default, rclone will exit with return code 0 if there were no errors.
|
||||||
|
|
||||||
|
This option allows rclone to return exit code 9 if no files were transferred
|
||||||
|
between the source and destination. This allows using rclone in scripts, and
|
||||||
|
triggering follow-on actions if data was copied, or skipping if not.
|
||||||
|
|
||||||
|
NB: Enabling this option turns a usually non-fatal error into a potentially
|
||||||
|
fatal one - please check and adjust your scripts accordingly!
|
||||||
|
|
||||||
|
|
||||||
### --ignore-case-sync ###
|
### --ignore-case-sync ###
|
||||||
|
|
||||||
Using this option will cause rclone to ignore the case of the files
|
Using this option will cause rclone to ignore the case of the files
|
||||||
@ -1622,6 +1634,7 @@ it will log a high priority message if the retry was successful.
|
|||||||
* `6` - Less serious errors (like 461 errors from dropbox) (NoRetry errors)
|
* `6` - Less serious errors (like 461 errors from dropbox) (NoRetry errors)
|
||||||
* `7` - Fatal error (one that more retries won't fix, like account suspended) (Fatal errors)
|
* `7` - Fatal error (one that more retries won't fix, like account suspended) (Fatal errors)
|
||||||
* `8` - Transfer exceeded - limit set by --max-transfer reached
|
* `8` - Transfer exceeded - limit set by --max-transfer reached
|
||||||
|
* `9` - Operation successful, but no files transferred
|
||||||
|
|
||||||
Environment Variables
|
Environment Variables
|
||||||
---------------------
|
---------------------
|
||||||
|
@ -100,6 +100,7 @@ type ConfigInfo struct {
|
|||||||
StatsOneLine bool
|
StatsOneLine bool
|
||||||
StatsOneLineDate bool // If we want a date prefix at all
|
StatsOneLineDate bool // If we want a date prefix at all
|
||||||
StatsOneLineDateFormat string // If we want to customize the prefix
|
StatsOneLineDateFormat string // If we want to customize the prefix
|
||||||
|
ErrorOnNoTransfer bool // Set appropriate exit code if no files transferred
|
||||||
Progress bool
|
Progress bool
|
||||||
Cookie bool
|
Cookie bool
|
||||||
UseMmap bool
|
UseMmap bool
|
||||||
|
@ -101,6 +101,7 @@ func AddFlags(flagSet *pflag.FlagSet) {
|
|||||||
flags.BoolVarP(flagSet, &fs.Config.StatsOneLine, "stats-one-line", "", fs.Config.StatsOneLine, "Make the stats fit on one line.")
|
flags.BoolVarP(flagSet, &fs.Config.StatsOneLine, "stats-one-line", "", fs.Config.StatsOneLine, "Make the stats fit on one line.")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.StatsOneLineDate, "stats-one-line-date", "", fs.Config.StatsOneLineDate, "Enables --stats-one-line and add current date/time prefix.")
|
flags.BoolVarP(flagSet, &fs.Config.StatsOneLineDate, "stats-one-line-date", "", fs.Config.StatsOneLineDate, "Enables --stats-one-line and add current date/time prefix.")
|
||||||
flags.StringVarP(flagSet, &fs.Config.StatsOneLineDateFormat, "stats-one-line-date-format", "", fs.Config.StatsOneLineDateFormat, "Enables --stats-one-line-date and uses custom formatted date. Enclose date string in double quotes (\"). See https://golang.org/pkg/time/#Time.Format")
|
flags.StringVarP(flagSet, &fs.Config.StatsOneLineDateFormat, "stats-one-line-date-format", "", fs.Config.StatsOneLineDateFormat, "Enables --stats-one-line-date and uses custom formatted date. Enclose date string in double quotes (\"). See https://golang.org/pkg/time/#Time.Format")
|
||||||
|
flags.BoolVarP(flagSet, &fs.Config.ErrorOnNoTransfer, "error-on-no-transfer", "", fs.Config.ErrorOnNoTransfer, "Sets exit code 9 if no files are transferred, useful in scripts")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.Progress, "progress", "P", fs.Config.Progress, "Show progress during transfer.")
|
flags.BoolVarP(flagSet, &fs.Config.Progress, "progress", "P", fs.Config.Progress, "Show progress during transfer.")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.Cookie, "use-cookies", "", fs.Config.Cookie, "Enable session cookiejar.")
|
flags.BoolVarP(flagSet, &fs.Config.Cookie, "use-cookies", "", fs.Config.Cookie, "Enable session cookiejar.")
|
||||||
flags.BoolVarP(flagSet, &fs.Config.UseMmap, "use-mmap", "", fs.Config.UseMmap, "Use mmap allocator (see docs).")
|
flags.BoolVarP(flagSet, &fs.Config.UseMmap, "use-mmap", "", fs.Config.UseMmap, "Use mmap allocator (see docs).")
|
||||||
|
Loading…
Reference in New Issue
Block a user