internal/flags: preserve BigFlag values from environment variables

This commit is contained in:
lisenokdonbassenok 2026-01-13 00:45:19 +02:00 committed by GitHub
parent 31d5d82ce5
commit 07f5030e50
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -157,21 +157,25 @@ func (f *BigFlag) String() string { return cli.FlagStringer(f) }
func (f *BigFlag) Apply(set *flag.FlagSet) error { func (f *BigFlag) Apply(set *flag.FlagSet) error {
// Set default value so that environment wont be able to overwrite it // Set default value so that environment wont be able to overwrite it
if f.Value != nil { if f.Value != nil && f.defaultValue == nil {
f.defaultValue = new(big.Int).Set(f.Value) f.defaultValue = new(big.Int).Set(f.Value)
} }
if f.Value == nil {
f.Value = new(big.Int)
}
for _, envVar := range f.EnvVars { for _, envVar := range f.EnvVars {
envVar = strings.TrimSpace(envVar) envVar = strings.TrimSpace(envVar)
if value, found := syscall.Getenv(envVar); found { if value, found := syscall.Getenv(envVar); found {
if _, ok := f.Value.SetString(value, 10); !ok { intVal, ok := math.ParseBig256(value)
if !ok {
return fmt.Errorf("could not parse %q from environment variable %q for flag %s", value, envVar, f.Name) return fmt.Errorf("could not parse %q from environment variable %q for flag %s", value, envVar, f.Name)
} }
f.Value.Set(intVal)
f.HasBeenSet = true f.HasBeenSet = true
break break
} }
} }
eachName(f, func(name string) { eachName(f, func(name string) {
f.Value = new(big.Int)
set.Var((*bigValue)(f.Value), name, f.Usage) set.Var((*bigValue)(f.Value), name, f.Usage)
}) })
return nil return nil