@@ -20,11 +20,13 @@ import (
20
20
"encoding"
21
21
"errors"
22
22
"flag"
23
+ "fmt"
23
24
"math/big"
24
25
"os"
25
26
"os/user"
26
27
"path/filepath"
27
28
"strings"
29
+ "syscall"
28
30
29
31
"github.com/ethereum/go-ethereum/common/math"
30
32
"github.com/urfave/cli/v2"
@@ -80,6 +82,14 @@ func (f *DirectoryFlag) String() string { return cli.FlagStringer(f) }
80
82
// Apply called by cli library, grabs variable from environment (if in env)
81
83
// and adds variable to flag set for parsing.
82
84
func (f * DirectoryFlag ) Apply (set * flag.FlagSet ) error {
85
+ for _ , envVar := range f .EnvVars {
86
+ envVar = strings .TrimSpace (envVar )
87
+ if value , found := syscall .Getenv (envVar ); found {
88
+ f .Value .Set (value )
89
+ f .HasBeenSet = true
90
+ break
91
+ }
92
+ }
83
93
eachName (f , func (name string ) {
84
94
set .Var (& f .Value , f .Name , f .Usage )
85
95
})
@@ -167,6 +177,16 @@ func (f *TextMarshalerFlag) IsSet() bool { return f.HasBeenSet }
167
177
func (f * TextMarshalerFlag ) String () string { return cli .FlagStringer (f ) }
168
178
169
179
func (f * TextMarshalerFlag ) Apply (set * flag.FlagSet ) error {
180
+ for _ , envVar := range f .EnvVars {
181
+ envVar = strings .TrimSpace (envVar )
182
+ if value , found := syscall .Getenv (envVar ); found {
183
+ if err := f .Value .UnmarshalText ([]byte (value )); err != nil {
184
+ return fmt .Errorf ("could not parse %q from environment variable %q for flag %s: %s" , value , envVar , f .Name , err )
185
+ }
186
+ f .HasBeenSet = true
187
+ break
188
+ }
189
+ }
170
190
eachName (f , func (name string ) {
171
191
set .Var (textMarshalerVal {f .Value }, f .Name , f .Usage )
172
192
})
@@ -249,6 +269,16 @@ func (f *BigFlag) IsSet() bool { return f.HasBeenSet }
249
269
func (f * BigFlag ) String () string { return cli .FlagStringer (f ) }
250
270
251
271
func (f * BigFlag ) Apply (set * flag.FlagSet ) error {
272
+ for _ , envVar := range f .EnvVars {
273
+ envVar = strings .TrimSpace (envVar )
274
+ if value , found := syscall .Getenv (envVar ); found {
275
+ if _ , ok := f .Value .SetString (value , 10 ); ! ok {
276
+ return fmt .Errorf ("could not parse %q from environment variable %q for flag %s" , value , envVar , f .Name )
277
+ }
278
+ f .HasBeenSet = true
279
+ break
280
+ }
281
+ }
252
282
eachName (f , func (name string ) {
253
283
f .Value = new (big.Int )
254
284
set .Var ((* bigValue )(f .Value ), f .Name , f .Usage )
0 commit comments