From 6af7a0e0e70b46be933aa507d0a4d5fc8dcd3c9d Mon Sep 17 00:00:00 2001 From: Brad Erickson Date: Sat, 5 Dec 2015 15:30:21 -0800 Subject: [PATCH] [utils] Provide error message for missing build preset options Adds a try/catch block to utils/SwiftBuildSupport.py to catch ConfigParser.InterpolationMissingOptionError exceptions caused by missing required preset options. Stores all missing options to print before exit(1) in get_preset_options(). --- utils/SwiftBuildSupport.py | 33 ++++++++++++++++++++++++++------- 1 file changed, 26 insertions(+), 7 deletions(-) diff --git a/utils/SwiftBuildSupport.py b/utils/SwiftBuildSupport.py index d87121c68b8ff..22abaab0d4118 100644 --- a/utils/SwiftBuildSupport.py +++ b/utils/SwiftBuildSupport.py @@ -129,12 +129,24 @@ def _load_preset_files_impl(preset_file_names, substitutions={}): def _get_preset_options_impl(config, substitutions, preset_name): section_name = _PRESET_PREFIX + preset_name if section_name not in config.sections(): - return (None, None) + return (None, None, None) build_script_opts = [] build_script_impl_opts = [] + missing_opts = [] dash_dash_seen = False - for o, a in config.items(section_name): + + for o in config.options(section_name): + try: + a = config.get(section_name, o) + except ConfigParser.InterpolationMissingOptionError, e: + # e.reference contains the correctly formatted option + missing_opts.append(e.reference) + continue + + if not a: + a = "" + if o in substitutions: continue @@ -143,10 +155,13 @@ def _get_preset_options_impl(config, substitutions, preset_name): # Split on newlines and filter out empty lines. mixins = filter(None, [m.strip() for m in a.splitlines()]) for mixin in mixins: - (base_build_script_opts, base_build_script_impl_opts) = \ + (base_build_script_opts, \ + base_build_script_impl_opts, \ + base_missing_opts) = \ _get_preset_options_impl(config, substitutions, mixin) build_script_opts += base_build_script_opts build_script_impl_opts += base_build_script_impl_opts + missing_opts += base_missing_opts elif o == "dash-dash": dash_dash_seen = True elif a == "": @@ -159,17 +174,22 @@ def _get_preset_options_impl(config, substitutions, preset_name): build_script_opts.append(opt) else: build_script_impl_opts.append(opt) - return (build_script_opts, build_script_impl_opts) + + return (build_script_opts, build_script_impl_opts, missing_opts) def get_preset_options(substitutions, preset_file_names, preset_name): config = _load_preset_files_impl(preset_file_names, substitutions) - (build_script_opts, build_script_impl_opts) = \ + (build_script_opts, build_script_impl_opts, missing_opts) = \ _get_preset_options_impl(config, substitutions, preset_name) - if build_script_opts is None: + if not build_script_opts: print_with_argv0("preset '" + preset_name + "' not found") sys.exit(1) + if missing_opts: + print_with_argv0("missing option(s) for preset '" + preset_name + \ + "': " + ", ".join(missing_opts)) + sys.exit(1) return build_script_opts + [ "--" ] + build_script_impl_opts @@ -194,4 +214,3 @@ def __enter__(self): def __exit__(self, type, value, traceback): os.chdir(self.old_cwd) -