]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_argparse: put args from env before existing ones 33261/head
authorKefu Chai <kchai@redhat.com>
Wed, 12 Feb 2020 12:47:12 +0000 (20:47 +0800)
committerNathan Cutler <ncutler@suse.com>
Tue, 18 Feb 2020 09:07:07 +0000 (10:07 +0100)
to ensure environment variables can be overriden by command line
arguments.

For example, if you have "CEPH_ARGS='--id XYZ'", passing "--id ABC" to
a Ceph CLI tool should result in the ABC id being utilized.

Fixes: https://tracker.ceph.com/issues/43795
Signed-off-by: Kefu Chai <kchai@redhat.com>
(cherry picked from commit 36b81324ae450ea065865ef75cf789ef0d36d9cf)

src/common/ceph_argparse.cc
src/test/ceph_argparse.cc

index d7dda71034ba5fc8b8363e07179b056b96a2a660..08e82424ac0fc31b96a79069317bf22ed7bf7033 100644 (file)
@@ -117,14 +117,14 @@ void env_to_vec(std::vector<const char*>& args, const char *name)
   auto [env_options, env_arguments] = split_dashdash(env);
 
   args.clear();
-  args.insert(args.end(), options.begin(), options.end());
   args.insert(args.end(), env_options.begin(), env_options.end());
+  args.insert(args.end(), options.begin(), options.end());
   if (arguments.empty() && env_arguments.empty()) {
     return;
   }
   args.push_back("--");
-  args.insert(args.end(), arguments.begin(), arguments.end());
   args.insert(args.end(), env_arguments.begin(), env_arguments.end());
+  args.insert(args.end(), arguments.begin(), arguments.end());
 }
 
 void argv_to_vec(int argc, const char **argv,
index b1cc07d4f39dda520efec30657dac45213d7c72c..ae1461a09405a16088558764d0f4820145a5a82d 100644 (file)
@@ -385,14 +385,15 @@ TEST(CephArgParse, env_to_vec) {
     clear_g_str_vec();
     env_to_vec(args);
     EXPECT_EQ(3u, args.size());
-    EXPECT_EQ(string("b"), args[1]);
-    EXPECT_EQ(string("c"), args[2]);
+    EXPECT_EQ(string("b"), args[0]);
+    EXPECT_EQ(string("c"), args[1]);
+    EXPECT_EQ(string("a"), args[2]);
     setenv("WHATEVER", "d e", 0);
     clear_g_str_vec();
     env_to_vec(args, "WHATEVER");
     EXPECT_EQ(5u, args.size());
-    EXPECT_EQ(string("d"), args[3]);
-    EXPECT_EQ(string("e"), args[4]);
+    EXPECT_EQ(string("d"), args[0]);
+    EXPECT_EQ(string("e"), args[1]);
   }
   {
     std::vector<const char*> args;
@@ -404,11 +405,11 @@ TEST(CephArgParse, env_to_vec) {
     clear_g_str_vec();
     env_to_vec(args);
     EXPECT_EQ(5u, args.size());
-    EXPECT_EQ(string("a"), args[0]);
-    EXPECT_EQ(string("b"), args[1]);
+    EXPECT_EQ(string("b"), args[0]);
+    EXPECT_EQ(string("a"), args[1]);
     EXPECT_EQ(string("--"), args[2]);
-    EXPECT_EQ(string("c"), args[3]);
-    EXPECT_EQ(string("d"), args[4]);
+    EXPECT_EQ(string("d"), args[3]);
+    EXPECT_EQ(string("c"), args[4]);
   }
   {
     std::vector<const char*> args;
@@ -419,8 +420,8 @@ TEST(CephArgParse, env_to_vec) {
     clear_g_str_vec();
     env_to_vec(args);
     EXPECT_EQ(4u, args.size());
-    EXPECT_EQ(string("a"), args[0]);
-    EXPECT_EQ(string("b"), args[1]);
+    EXPECT_EQ(string("b"), args[0]);
+    EXPECT_EQ(string("a"), args[1]);
     EXPECT_EQ(string("--"), args[2]);
     EXPECT_EQ(string("c"), args[3]);
   }
@@ -435,8 +436,8 @@ TEST(CephArgParse, env_to_vec) {
     EXPECT_EQ(4u, args.size());
     EXPECT_EQ(string("b"), args[0]);
     EXPECT_EQ(string("--"), args[1]);
-    EXPECT_EQ(string("c"), args[2]);
-    EXPECT_EQ(string("d"), args[3]);
+    EXPECT_EQ(string("d"), args[2]);
+    EXPECT_EQ(string("c"), args[3]);
   }
   {
     std::vector<const char*> args;
@@ -446,8 +447,8 @@ TEST(CephArgParse, env_to_vec) {
     clear_g_str_vec();
     env_to_vec(args);
     EXPECT_EQ(4u, args.size());
-    EXPECT_EQ(string("b"), args[0]);
-    EXPECT_EQ(string("c"), args[1]);
+    EXPECT_EQ(string("c"), args[0]);
+    EXPECT_EQ(string("b"), args[1]);
     EXPECT_EQ(string("--"), args[2]);
     EXPECT_EQ(string("d"), args[3]);
   }
@@ -463,8 +464,8 @@ TEST(CephArgParse, env_to_vec) {
     EXPECT_EQ(4u, args.size());
     EXPECT_EQ(string("a"), args[0]);
     EXPECT_EQ(string("--"), args[1]);
-    EXPECT_EQ(string("c"), args[2]);
-    EXPECT_EQ(string("d"), args[3]);
+    EXPECT_EQ(string("d"), args[2]);
+    EXPECT_EQ(string("c"), args[3]);
   }
   {
     std::vector<const char*> args;
@@ -476,8 +477,8 @@ TEST(CephArgParse, env_to_vec) {
     clear_g_str_vec();
     env_to_vec(args);
     EXPECT_EQ(4u, args.size());
-    EXPECT_EQ(string("a"), args[0]);
-    EXPECT_EQ(string("d"), args[1]);
+    EXPECT_EQ(string("d"), args[0]);
+    EXPECT_EQ(string("a"), args[1]);
     EXPECT_EQ(string("--"), args[2]);
     EXPECT_EQ(string("c"), args[3]);
   }