@@ -379,8 +379,14 @@ def set(key, value):
379
379
sections [None ] = []
380
380
section_order = [None ]
381
381
targets = {}
382
+ top_level_keys = []
382
383
383
384
for line in open (rust_dir + '/config.toml.example' ).read ().split ("\n " ):
385
+ if cur_section == None :
386
+ if line .count ('=' ) == 1 :
387
+ top_level_key = line .split ('=' )[0 ]
388
+ top_level_key = top_level_key .strip (' #' )
389
+ top_level_keys .append (top_level_key )
384
390
if line .startswith ('[' ):
385
391
cur_section = line [1 :- 1 ]
386
392
if cur_section .startswith ('target' ):
@@ -459,12 +465,22 @@ def configure_section(lines, config):
459
465
raise RuntimeError ("failed to find config line for {}" .format (key ))
460
466
461
467
462
- for section_key in config :
463
- section_config = config [section_key ]
464
- if section_key not in sections :
465
- raise RuntimeError ("config key {} not in sections" .format (section_key ))
468
+ def configure_top_level_key (lines , top_level_key , value ):
469
+ for i , line in enumerate (lines ):
470
+ if line .startswith ('#' + top_level_key + ' = ' ) or line .startswith (top_level_key + ' = ' ):
471
+ lines [i ] = "{} = {}" .format (top_level_key , value )
472
+ return
466
473
467
- if section_key == 'target' :
474
+ raise RuntimeError ("failed to find config line for {}" .format (top_level_key ))
475
+
476
+
477
+ for section_key , section_config in config .items ():
478
+ if section_key not in sections and section_key not in top_level_keys :
479
+ raise RuntimeError ("config key {} not in sections or top_level_keys" .format (section_key ))
480
+ if section_key in top_level_keys :
481
+ configure_top_level_key (sections [None ], section_key , section_config )
482
+
483
+ elif section_key == 'target' :
468
484
for target in section_config :
469
485
configure_section (targets [target ], section_config [target ])
470
486
else :
0 commit comments