Files

37 lines
803 B
Go

package flags
import (
"fmt"
"os"
"strconv"
"hauler.dev/go/hauler/v2/pkg/consts"
)
// ResolveRetries resolves flag > HAULER_RETRIES > default, same shape as
// ResolveBlobConcurrency. 0 means "use the default", not "never retry".
func ResolveRetries(flagValue int) (int, error) {
if flagValue < 0 {
return 0, fmt.Errorf("--retries must be >= 0, got %d", flagValue)
}
if flagValue > 0 {
return flagValue, nil
}
v := os.Getenv(consts.HaulerRetries)
if v == "" {
return consts.DefaultRetries, nil
}
n, err := strconv.Atoi(v)
if err != nil {
return 0, fmt.Errorf("invalid %s value %q: %w", consts.HaulerRetries, v, err)
}
if n < 0 {
return 0, fmt.Errorf("%s must be >= 0, got %d", consts.HaulerRetries, n)
}
if n == 0 {
return consts.DefaultRetries, nil
}
return n, nil
}