@@ -20,9 +20,11 @@ import (
20
20
"fmt"
21
21
"os"
22
22
"regexp"
23
+ "sort"
23
24
"strings"
24
25
25
26
"github.com/ethereum/go-ethereum/internal/version"
27
+ "github.com/ethereum/go-ethereum/log"
26
28
"github.com/ethereum/go-ethereum/params"
27
29
"github.com/mattn/go-isatty"
28
30
"github.com/urfave/cli/v2"
@@ -263,3 +265,37 @@ func AutoEnvVars(flags []cli.Flag, prefix string) {
263
265
}
264
266
}
265
267
}
268
+
269
+ // CheckEnvVars iterates over all the environment variables and checks if any of
270
+ // them look like a CLI flag but is not consumed. This can be used to detect old
271
+ // or mistyped names.
272
+ func CheckEnvVars (ctx * cli.Context , flags []cli.Flag , prefix string ) {
273
+ known := make (map [string ]string )
274
+ for _ , flag := range flags {
275
+ docflag , ok := flag .(cli.DocGenerationFlag )
276
+ if ! ok {
277
+ continue
278
+ }
279
+ for _ , envvar := range docflag .GetEnvVars () {
280
+ known [envvar ] = flag .Names ()[0 ]
281
+ }
282
+ }
283
+ keyvals := os .Environ ()
284
+ sort .Strings (keyvals )
285
+
286
+ for _ , keyval := range keyvals {
287
+ key := strings .Split (keyval , "=" )[0 ]
288
+ if ! strings .HasPrefix (key , prefix ) {
289
+ continue
290
+ }
291
+ if flag , ok := known [key ]; ok {
292
+ if ctx .Count (flag ) > 0 {
293
+ log .Info ("Config environment variable found" , "envvar" , key , "shadowedby" , "--" + flag )
294
+ } else {
295
+ log .Info ("Config environment variable found" , "envvar" , key )
296
+ }
297
+ } else {
298
+ log .Warn ("Unknown config environment variable" , "envvar" , key )
299
+ }
300
+ }
301
+ }
0 commit comments