You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by mp...@apache.org on 2015/09/19 16:39:48 UTC

mesos git commit: Made command-line flags take precedence over environment variables.

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 <kl...@cguru.net>
Authored: Sat Sep 19 04:50:23 2015 -0400
Committer: Michael Park <mp...@apache.org>
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());
 }