From 05d51df07bdbb051de00a3e1bc8fab13c3092b11 Mon Sep 17 00:00:00 2001 From: Boris Kolpackov Date: Thu, 21 Oct 2021 17:18:00 +0200 Subject: Add --progress common option --- bdep/bdep.cxx | 41 ++++++++++++++++++++++++++++++++++++++--- 1 file changed, 38 insertions(+), 3 deletions(-) (limited to 'bdep/bdep.cxx') diff --git a/bdep/bdep.cxx b/bdep/bdep.cxx index dd65c25..9731aaa 100644 --- a/bdep/bdep.cxx +++ b/bdep/bdep.cxx @@ -259,7 +259,7 @@ init (const common_options& co, if (o.default_options_specified ()) extra = o.default_options (); - o = merge_options ( + default_options dos ( load_default_options ( nullopt /* sys_dir */, home_directory (), @@ -277,8 +277,43 @@ init (const common_options& co, }, "--options-file", args_pos, - 1024), - o); + 1024)); + + // Verify common options. + // + // Also merge the --progress/--no-progress options, overriding a less + // specific flag with a more specific. + // + optional progress; + auto merge_progress = [&progress] + (const O& o, + const default_options_entry* e = nullptr) + { + if (o.progress () && o.no_progress ()) + { + diag_record dr; + (e != nullptr ? dr << fail (e->file) : dr << fail) + << "both --progress and --no-progress specified"; + } + + if (o.progress ()) + progress = true; + else if (o.no_progress ()) + progress = false; + }; + + for (const default_options_entry& e: dos) + merge_progress (e.options, &e); + + merge_progress (o); + + o = merge_options (dos, o); + + if (progress) + { + o.progress (*progress); + o.no_progress (!*progress); + } } catch (const invalid_argument& e) { -- cgit v1.1