Repository: mesos Updated Branches: refs/heads/master ed7de0410 -> 704eee5ad
Made command-line flags take precedence over environment variables. Review: https://reviews.apache.org/r/38259 Project: http://git-wip-us.apache.org/repos/asf/mesos/repo Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/704eee5a Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/704eee5a Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/704eee5a Branch: refs/heads/master Commit: 704eee5ad98831ff6f4a47d3044b0b092908a497 Parents: ed7de04 Author: Klaus Ma <[email protected]> Authored: Sat Sep 19 04:50:23 2015 -0400 Committer: Michael Park <[email protected]> Committed: Sat Sep 19 04:55:20 2015 -0400 ---------------------------------------------------------------------- .../stout/include/stout/flags/flags.hpp | 30 ++++++++++++-------- .../3rdparty/stout/tests/flags_tests.cpp | 9 +++--- 2 files changed, 23 insertions(+), 16 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/mesos/blob/704eee5a/3rdparty/libprocess/3rdparty/stout/include/stout/flags/flags.hpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/flags/flags.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/flags/flags.hpp index 9da213f..b91318c 100644 --- a/3rdparty/libprocess/3rdparty/stout/include/stout/flags/flags.hpp +++ b/3rdparty/libprocess/3rdparty/stout/include/stout/flags/flags.hpp @@ -555,13 +555,14 @@ inline Try<Nothing> FlagsBase::load( bool unknowns, bool duplicates) { - std::map<std::string, Option<std::string>> values; + std::map<std::string, Option<std::string>> envValues; + std::map<std::string, Option<std::string>> cmdValues; // Grab the program name from argv[0]. programName_ = argc > 0 ? Path(argv[0]).basename() : ""; if (prefix.isSome()) { - values = extract(prefix.get()); + envValues = extract(prefix.get()); } // Read flags from the command line. @@ -594,16 +595,18 @@ inline Try<Nothing> FlagsBase::load( name = strings::lower(name); if (!duplicates) { - if (values.count(name) > 0 || - (name.find("no-") == 0 && values.count(name.substr(3)) > 0)) { + if (cmdValues.count(name) > 0 || + (name.find("no-") == 0 && cmdValues.count(name.substr(3)) > 0)) { return Error("Duplicate flag '" + name + "' on command line"); } } - values[name] = value; + cmdValues[name] = value; } - return load(values, unknowns); + cmdValues.insert(envValues.begin(), envValues.end()); + + return load(cmdValues, unknowns); } @@ -614,10 +617,11 @@ inline Try<Nothing> FlagsBase::load( bool unknowns, bool duplicates) { - std::map<std::string, Option<std::string>> values; + std::map<std::string, Option<std::string>> envValues; + std::map<std::string, Option<std::string>> cmdValues; if (prefix.isSome()) { - values = extract(prefix.get()); + envValues = extract(prefix.get()); } // Grab the program name from argv, without removing it. @@ -661,16 +665,18 @@ inline Try<Nothing> FlagsBase::load( name = strings::lower(name); if (!duplicates) { - if (values.count(name) > 0 || - (name.find("no-") == 0 && values.count(name.substr(3)) > 0)) { + if (cmdValues.count(name) > 0 || + (name.find("no-") == 0 && cmdValues.count(name.substr(3)) > 0)) { return Error("Duplicate flag '" + name + "' on command line"); } } - values[name] = value; + cmdValues[name] = value; } - Try<Nothing> result = load(values, unknowns); + cmdValues.insert(envValues.begin(), envValues.end()); + + Try<Nothing> result = load(cmdValues, unknowns); // Update 'argc' and 'argv' if we successfully loaded the flags. if (!result.isError()) { http://git-wip-us.apache.org/repos/asf/mesos/blob/704eee5a/3rdparty/libprocess/3rdparty/stout/tests/flags_tests.cpp ---------------------------------------------------------------------- diff --git a/3rdparty/libprocess/3rdparty/stout/tests/flags_tests.cpp b/3rdparty/libprocess/3rdparty/stout/tests/flags_tests.cpp index 43c09f3..0c7e5e3 100644 --- a/3rdparty/libprocess/3rdparty/stout/tests/flags_tests.cpp +++ b/3rdparty/libprocess/3rdparty/stout/tests/flags_tests.cpp @@ -403,9 +403,10 @@ TEST(FlagsTest, DuplicatesFromEnvironment) }; Try<Nothing> load = flags.load("FLAGSTEST_", arraySize(argv), argv); - EXPECT_ERROR(load); + EXPECT_SOME(load); - EXPECT_EQ("Duplicate flag 'name1' on command line", load.error()); + // The environment variables are overwritten by command line flags. + EXPECT_EQ(flags.name1, "billy joel"); os::unsetenv("FLAGSTEST_name1"); } @@ -421,10 +422,10 @@ TEST(FlagsTest, DuplicatesFromCommandLine) "--name1=ben folds" }; + // TODO(klaus1982): Simply checking for the error. Once typed errors are + // introduced, capture it within the type system. Try<Nothing> load = flags.load("FLAGSTEST_", arraySize(argv), argv); EXPECT_ERROR(load); - - EXPECT_EQ("Duplicate flag 'name1' on command line", load.error()); }
