aboutsummaryrefslogtreecommitdiff
path: root/bdep/bdep.cxx
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2021-10-21 17:18:00 +0200
committerKaren Arutyunov <karen@codesynthesis.com>2021-10-25 11:49:10 +0300
commit05d51df07bdbb051de00a3e1bc8fab13c3092b11 (patch)
tree2dee4fc1a26a315cba44c8589052af3651f8000d /bdep/bdep.cxx
parentbdb1c184cc869dbf7d70f4f8fd373f31c9e3f10d (diff)
Add --progress common option
Diffstat (limited to 'bdep/bdep.cxx')
-rw-r--r--bdep/bdep.cxx41
1 files changed, 38 insertions, 3 deletions
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<O> dos (
load_default_options<O, cli::argv_file_scanner, cli::unknown_mode> (
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<bool> progress;
+ auto merge_progress = [&progress]
+ (const O& o,
+ const default_options_entry<O>* 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<O>& 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)
{