@@ -379,8 +379,14 @@ def set(key, value):
379379sections [None ] = []
380380section_order = [None ]
381381targets = {}
382+ top_level_keys = []
382383
383384for 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 )
384390 if line .startswith ('[' ):
385391 cur_section = line [1 :- 1 ]
386392 if cur_section .startswith ('target' ):
@@ -459,12 +465,22 @@ def configure_section(lines, config):
459465 raise RuntimeError ("failed to find config line for {}" .format (key ))
460466
461467
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
466473
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' :
468484 for target in section_config :
469485 configure_section (targets [target ], section_config [target ])
470486 else :
0 commit comments