From fbc717e62050aa6551ca9066aa72ef3bcc45bae1 Mon Sep 17 00:00:00 2001 From: Tim Hockin Date: Sat, 8 Jun 2024 14:10:53 -0700 Subject: [PATCH] Clean up flag-related messages --- env.go | 16 ++++++------- main.go | 72 ++++++++++++++++++++++++++++----------------------------- 2 files changed, 44 insertions(+), 44 deletions(-) diff --git a/env.go b/env.go index 52c653c90..cbf1fc0d6 100644 --- a/env.go +++ b/env.go @@ -60,7 +60,7 @@ func envBoolOrError(def bool, key string, alts ...string) (bool, error) { if err == nil { return parsed, nil } - return false, fmt.Errorf("ERROR: invalid bool env %s=%q: %w", key, val, err) + return false, fmt.Errorf("invalid bool env %s=%q: %w", key, val, err) } if val := os.Getenv(key); val != "" { @@ -77,7 +77,7 @@ func envBoolOrError(def bool, key string, alts ...string) (bool, error) { func envBool(def bool, key string, alts ...string) bool { val, err := envBoolOrError(def, key, alts...) if err != nil { - fmt.Fprintln(os.Stderr, err) + fmt.Fprintf(os.Stderr, "FATAL: %v\n", err) os.Exit(1) return false } @@ -90,7 +90,7 @@ func envIntOrError(def int, key string, alts ...string) (int, error) { if err == nil { return int(parsed), nil } - return 0, fmt.Errorf("ERROR: invalid int env %s=%q: %w", key, val, err) + return 0, fmt.Errorf("invalid int env %s=%q: %w", key, val, err) } if val := os.Getenv(key); val != "" { @@ -107,7 +107,7 @@ func envIntOrError(def int, key string, alts ...string) (int, error) { func envInt(def int, key string, alts ...string) int { val, err := envIntOrError(def, key, alts...) if err != nil { - fmt.Fprintln(os.Stderr, err) + fmt.Fprintf(os.Stderr, "FATAL: %v\n", err) os.Exit(1) return 0 } @@ -120,7 +120,7 @@ func envFloatOrError(def float64, key string, alts ...string) (float64, error) { if err == nil { return parsed, nil } - return 0, fmt.Errorf("ERROR: invalid float env %s=%q: %w", key, val, err) + return 0, fmt.Errorf("invalid float env %s=%q: %w", key, val, err) } if val := os.Getenv(key); val != "" { @@ -137,7 +137,7 @@ func envFloatOrError(def float64, key string, alts ...string) (float64, error) { func envFloat(def float64, key string, alts ...string) float64 { val, err := envFloatOrError(def, key, alts...) if err != nil { - fmt.Fprintln(os.Stderr, err) + fmt.Fprintf(os.Stderr, "FATAL: %v\n", err) os.Exit(1) return 0 } @@ -150,7 +150,7 @@ func envDurationOrError(def time.Duration, key string, alts ...string) (time.Dur if err == nil { return parsed, nil } - return 0, fmt.Errorf("ERROR: invalid duration env %s=%q: %w", key, val, err) + return 0, fmt.Errorf("invalid duration env %s=%q: %w", key, val, err) } if val := os.Getenv(key); val != "" { @@ -167,7 +167,7 @@ func envDurationOrError(def time.Duration, key string, alts ...string) (time.Dur func envDuration(def time.Duration, key string, alts ...string) time.Duration { val, err := envDurationOrError(def, key, alts...) if err != nil { - fmt.Fprintln(os.Stderr, err) + fmt.Fprintf(os.Stderr, "FATAL: %v\n", err) os.Exit(1) return 0 } diff --git a/main.go b/main.go index e79c02819..a93ffc4db 100644 --- a/main.go +++ b/main.go @@ -131,7 +131,7 @@ func main() { if err == nil { os.Exit(code) } - fmt.Fprintf(os.Stderr, "ERROR: unhandled pid1 error: %v\n", err) + fmt.Fprintf(os.Stderr, "FATAL: unhandled pid1 error: %v\n", err) os.Exit(127) } @@ -352,7 +352,7 @@ func main() { } var absRoot absPath if abs, err := absPath(*flRoot).Canonical(); err != nil { - fmt.Fprintf(os.Stderr, "ERROR: can't absolutize --root: %v\n", err) + fmt.Fprintf(os.Stderr, "FATAL: can't absolutize --root: %v\n", err) os.Exit(1) } else { absRoot = abs @@ -370,7 +370,7 @@ func main() { cmdRunner := cmd.NewRunner(log) if *flRepo == "" { - handleConfigError(log, true, "ERROR: --repo must be specified") + fatalConfigError(log, true, "required flag: --repo must be specified") } switch { @@ -378,32 +378,32 @@ func main() { // Back-compat log.V(0).Info("setting --ref from deprecated --branch") *flRef = *flDeprecatedBranch - case *flDeprecatedRev != "": + case *flDeprecatedRev != "" && *flDeprecatedBranch == "": // Back-compat log.V(0).Info("setting --ref from deprecated --rev") *flRef = *flDeprecatedRev case *flDeprecatedBranch != "" && *flDeprecatedRev != "": - handleConfigError(log, true, "ERROR: can't set --ref from deprecated --branch and --rev") + fatalConfigError(log, true, "deprecated flag combo: can't set --ref from deprecated --branch and --rev (one or the other is OK)") } if *flRef == "" { - handleConfigError(log, true, "ERROR: --ref must be specified") + fatalConfigError(log, true, "required flag: --ref must be specified") } if *flDepth < 0 { // 0 means "no limit" - handleConfigError(log, true, "ERROR: --depth must be greater than or equal to 0") + fatalConfigError(log, true, "invalid flag: --depth must be greater than or equal to 0") } switch submodulesMode(*flSubmodules) { case submodulesRecursive, submodulesShallow, submodulesOff: default: - handleConfigError(log, true, "ERROR: --submodules must be one of %q, %q, or %q", submodulesRecursive, submodulesShallow, submodulesOff) + fatalConfigError(log, true, "invalid flag: --submodules must be one of %q, %q, or %q", submodulesRecursive, submodulesShallow, submodulesOff) } switch *flGitGC { case gcAuto, gcAlways, gcAggressive, gcOff: default: - handleConfigError(log, true, "ERROR: --git-gc must be one of %q, %q, %q, or %q", gcAuto, gcAlways, gcAggressive, gcOff) + fatalConfigError(log, true, "invalid flag: --git-gc must be one of %q, %q, %q, or %q", gcAuto, gcAlways, gcAggressive, gcOff) } if *flDeprecatedDest != "" { @@ -422,11 +422,11 @@ func main() { *flPeriod = time.Duration(int(*flDeprecatedWait*1000)) * time.Millisecond } if *flPeriod < 10*time.Millisecond { - handleConfigError(log, true, "ERROR: --period must be at least 10ms") + fatalConfigError(log, true, "invalid flag: --period must be at least 10ms") } if *flDeprecatedChmod != 0 { - handleConfigError(log, true, "ERROR: --change-permissions is no longer supported") + fatalConfigError(log, true, "deprecated flag: --change-permissions is no longer supported") } var syncSig syscall.Signal @@ -443,7 +443,7 @@ func main() { } } if syncSig == 0 { - handleConfigError(log, true, "ERROR: --sync-on-signal must be a valid signal name or number") + fatalConfigError(log, true, "invalid flag: --sync-on-signal must be a valid signal name or number") } } @@ -453,7 +453,7 @@ func main() { *flSyncTimeout = time.Duration(*flDeprecatedTimeout) * time.Second } if *flSyncTimeout < 10*time.Millisecond { - handleConfigError(log, true, "ERROR: --sync-timeout must be at least 10ms") + fatalConfigError(log, true, "invalid flag: --sync-timeout must be at least 10ms") } if *flDeprecatedMaxSyncFailures != 0 { @@ -469,10 +469,10 @@ func main() { } if *flExechookCommand != "" { if *flExechookTimeout < time.Second { - handleConfigError(log, true, "ERROR: --exechook-timeout must be at least 1s") + fatalConfigError(log, true, "invalid flag: --exechook-timeout must be at least 1s") } if *flExechookBackoff < time.Second { - handleConfigError(log, true, "ERROR: --exechook-backoff must be at least 1s") + fatalConfigError(log, true, "invalid flag: --exechook-backoff must be at least 1s") } } @@ -482,60 +482,60 @@ func main() { *flWebhookStatusSuccess = 0 } if *flWebhookStatusSuccess < 0 { - handleConfigError(log, true, "ERROR: --webhook-success-status must be a valid HTTP code or 0") + fatalConfigError(log, true, "invalid flag: --webhook-success-status must be a valid HTTP code or 0") } if *flWebhookTimeout < time.Second { - handleConfigError(log, true, "ERROR: --webhook-timeout must be at least 1s") + fatalConfigError(log, true, "invalid flag: --webhook-timeout must be at least 1s") } if *flWebhookBackoff < time.Second { - handleConfigError(log, true, "ERROR: --webhook-backoff must be at least 1s") + fatalConfigError(log, true, "invalid flag: --webhook-backoff must be at least 1s") } } if *flUsername != "" { if *flPassword == "" && *flPasswordFile == "" { - handleConfigError(log, true, "ERROR: --password or --password-file must be specified when --username is specified") + fatalConfigError(log, true, "required flag: --password or --password-file must be specified when --username is specified") } if *flPassword != "" && *flPasswordFile != "" { - handleConfigError(log, true, "ERROR: only one of --password and --password-file may be specified") + fatalConfigError(log, true, "invalid flag: only one of --password and --password-file may be specified") } if u, err := url.Parse(*flRepo); err == nil { // it may not even parse as a URL, that's OK if u.User != nil { - handleConfigError(log, true, "ERROR: credentials may not be specified in --repo when --username is specified") + fatalConfigError(log, true, "invalid flag: credentials may not be specified in --repo when --username is specified") } } } else { if *flPassword != "" { - handleConfigError(log, true, "ERROR: --password may only be specified when --username is specified") + fatalConfigError(log, true, "invalid flag: --password may only be specified when --username is specified") } if *flPasswordFile != "" { - handleConfigError(log, true, "ERROR: --password-file may only be specified when --username is specified") + fatalConfigError(log, true, "invalid flag: --password-file may only be specified when --username is specified") } } if len(*flCredentials) > 0 { for _, cred := range *flCredentials { if cred.URL == "" { - handleConfigError(log, true, "ERROR: --credential URL must be specified") + fatalConfigError(log, true, "invalid flag: --credential URL must be specified") } if cred.Username == "" { - handleConfigError(log, true, "ERROR: --credential username must be specified") + fatalConfigError(log, true, "invalid flag: --credential username must be specified") } if cred.Password == "" && cred.PasswordFile == "" { - handleConfigError(log, true, "ERROR: --credential password or password-file must be set") + fatalConfigError(log, true, "invalid flag: --credential password or password-file must be specified") } if cred.Password != "" && cred.PasswordFile != "" { - handleConfigError(log, true, "ERROR: only one of --credential password and password-file may be specified") + fatalConfigError(log, true, "invalid flag: only one of --credential password and password-file may be specified") } } } if *flHTTPBind == "" { if *flHTTPMetrics { - handleConfigError(log, true, "ERROR: --http-bind must be specified when --http-metrics is set") + fatalConfigError(log, true, "required flag: --http-bind must be specified when --http-metrics is set") } if *flHTTPprof { - handleConfigError(log, true, "ERROR: --http-bind must be specified when --http-pprof is set") + fatalConfigError(log, true, "required flag: --http-bind must be specified when --http-pprof is set") } } @@ -552,7 +552,7 @@ func main() { "flags", logSafeFlags(*flVerbose)) if _, err := exec.LookPath(*flGitCmd); err != nil { - log.Error(err, "ERROR: git executable not found", "git", *flGitCmd) + log.Error(err, "FATAL: git executable not found", "git", *flGitCmd) os.Exit(1) } @@ -568,13 +568,13 @@ func main() { // very early so that we can normalize the path even when there are // symlinks in play. if err := os.MkdirAll(absRoot.String(), defaultDirMode); err != nil { - log.Error(err, "ERROR: can't make root dir", "path", absRoot) + log.Error(err, "FATAL: can't make root dir", "path", absRoot) os.Exit(1) } // Get rid of symlinks in the root path to avoid getting confused about // them later. The path must exist for EvalSymlinks to work. if delinked, err := filepath.EvalSymlinks(absRoot.String()); err != nil { - log.Error(err, "ERROR: can't normalize root path", "path", absRoot) + log.Error(err, "FATAL: can't normalize root path", "path", absRoot) os.Exit(1) } else { absRoot = absPath(delinked) @@ -617,7 +617,7 @@ func main() { if *flAddUser { if err := addUser(); err != nil { - log.Error(err, "ERROR: can't add user") + log.Error(err, "FATAL: can't add user") os.Exit(1) } } @@ -653,7 +653,7 @@ func main() { // Don't pollute the user's .gitconfig if this is being run directly. if f, err := os.CreateTemp("", "git-sync.gitconfig.*"); err != nil { - log.Error(err, "ERROR: can't create gitconfig file") + log.Error(err, "FATAL: can't create gitconfig file") os.Exit(1) } else { gitConfig := f.Name() @@ -1062,10 +1062,10 @@ func sleepForever() { os.Exit(0) } -// handleConfigError prints the error to the standard error, prints the usage +// fatalConfigError prints the error to the standard error, prints the usage // if the `printUsage` flag is true, exports the error to the error file and // exits the process with the exit code. -func handleConfigError(log *logging.Logger, printUsage bool, format string, a ...interface{}) { +func fatalConfigError(log *logging.Logger, printUsage bool, format string, a ...interface{}) { s := fmt.Sprintf(format, a...) fmt.Fprintln(os.Stderr, s) if printUsage {