]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
ceph_argparse: put args from env before existing ones 33243/head
authorKefu Chai <kchai@redhat.com>
Wed, 12 Feb 2020 12:47:12 +0000 (20:47 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 12 Feb 2020 14:18:30 +0000 (22:18 +0800)
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>
src/common/ceph_argparse.cc
src/test/ceph_argparse.cc

index 73272e554b4727cfeb01923c8f7c94318141c922..631bc7c54704368f57df510ce40021156e737429 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]);
   }