@@ -19,40 +19,44 @@ import (
1919// time with -ldflags.
2020var version = "development"
2121
22- func main () {
23- failed , err := mainCmd ()
24- if err != nil {
25- fmt .Fprintf (os .Stderr , "retry: %v\n " , err )
26- }
27- if failed {
28- os .Exit (1 )
29- }
22+ // cmdFlags represents the assorted command line flags that can be passed.
23+ type cmdFlags struct {
24+ retry.Spec
25+ quiet bool
26+ version bool
3027}
3128
32- func mainCmd () (bool , error ) {
33- var spec retry.Spec
34- var versionFlag bool
35- var quietFlag bool
36- flag .IntVar (& spec .Attempts , "attempts" , 3 , "maximum number of attempts" )
37- flag .BoolVar (& spec .Backoff , "backoff" , false , "use exponential backoff when sleeping" )
38- flag .IntVar (& spec .Consecutive , "consecutive" , 0 , "required number of back to back successes" )
39- flag .DurationVar (& spec .TotalTime , "max-time" , time .Minute , "maximum total time" )
40- flag .BoolVar (& quietFlag , "quiet" , false , "silence all output" )
41- flag .DurationVar (& spec .Sleep , "sleep" , 5 * time .Second , "time to sleep between attempts" )
42- flag .DurationVar (& spec .TaskTime , "task-time" , 0 , "maximum time for a single attempt" )
43- flag .BoolVar (& versionFlag , "version" , false , fmt .Sprintf ("print the version %q and exit" , version ))
29+ func main () {
30+ var flags cmdFlags
31+ flag .IntVar (& flags .Attempts , "attempts" , 3 , "maximum number of attempts" )
32+ flag .BoolVar (& flags .Backoff , "backoff" , false , "use exponential backoff when sleeping" )
33+ flag .IntVar (& flags .Consecutive , "consecutive" , 0 , "required number of back to back successes" )
34+ flag .DurationVar (& flags .TotalTime , "max-time" , time .Minute , "maximum total time" )
35+ flag .BoolVar (& flags .quiet , "quiet" , false , "silence all output" )
36+ flag .DurationVar (& flags .Sleep , "sleep" , 5 * time .Second , "time to sleep between attempts" )
37+ flag .DurationVar (& flags .TaskTime , "task-time" , 0 , "maximum time for a single attempt" )
38+ flag .BoolVar (& flags .version , "version" , false , fmt .Sprintf ("print the version %q and exit" , version ))
4439 flag .Usage = usage
4540 flag .Parse ()
4641
42+ if err := mainCmd (flags ); err != nil {
43+ if ! flags .quiet {
44+ fmt .Fprintf (os .Stderr , "retry: %v\n " , err )
45+ }
46+ os .Exit (1 )
47+ }
48+ }
49+
50+ func mainCmd (flags cmdFlags ) error {
4751 // If the version flag (-version) was given, print the version and exit.
48- if versionFlag {
52+ if flags . version {
4953 fmt .Println (version )
50- return false , nil
54+ return nil
5155 }
5256
5357 // If no arguments were given, there's nothing to do.
5458 if flag .NArg () == 0 {
55- return true , errors .New ("no command given" )
59+ return errors .New ("no command given" )
5660 }
5761
5862 var (
@@ -67,18 +71,10 @@ func mainCmd() (bool, error) {
6771 task = retry.HTTPTask {URL : command }
6872 } else {
6973 // Otherwise, assume the command references a (shell) command.
70- task = retry.ExecTask {Name : command , Args : args , Quiet : quietFlag }
74+ task = retry.ExecTask {Name : command , Args : args , Quiet : flags . quiet }
7175 }
7276
73- err := retry .Retry (spec , task )
74- switch {
75- case err != nil && quietFlag :
76- return true , nil // Intentionally silence error.
77- case err != nil :
78- return true , err
79- default :
80- return false , nil
81- }
77+ return retry .Retry (flags .Spec , task )
8278}
8379
8480func usage () {
0 commit comments