diff --git a/src/ostree/ot-main.c b/src/ostree/ot-main.c index c9c4f299..4b72f399 100644 --- a/src/ostree/ot-main.c +++ b/src/ostree/ot-main.c @@ -152,11 +152,6 @@ ostree_run (int argc, } } - else if (g_str_equal (argv[in], "--")) - { - break; - } - argv[out] = argv[in]; } @@ -348,6 +343,22 @@ ostree_option_context_parse (GOptionContext *context, if (!g_option_context_parse (context, argc, argv, error)) return FALSE; + /* Filter out the first -- we see; g_option_context_parse() leaves it in */ + int in, out; + gboolean removed_double_dashes = FALSE; + for (in = 1, out = 1; in < *argc; in++, out++) + { + if (g_str_equal ((*argv)[in], "--") && !removed_double_dashes) + { + removed_double_dashes = TRUE; + out--; + continue; + } + + (*argv)[out] = (*argv)[in]; + } + *argc = out; + if (opt_version) { /* This should now be YAML, like `docker version`, so it's both nice to read diff --git a/tests/test-config.sh b/tests/test-config.sh index 7e913d32..2f44c30b 100755 --- a/tests/test-config.sh +++ b/tests/test-config.sh @@ -66,9 +66,11 @@ fi assert_file_has_content err.txt "error: Too many arguments given" echo "ok config set" -# Check that "ostree config unset" works +# Check that using `--` works and that "ostree config unset" works ${CMD_PREFIX} ostree config --repo=repo set core.lock-timeout-secs 60 assert_file_has_content repo/config "lock-timeout-secs=60" +${CMD_PREFIX} ostree config --repo=repo -- set core.lock-timeout-secs -1 +assert_file_has_content repo/config "lock-timeout-secs=-1" ${CMD_PREFIX} ostree config --repo=repo unset core.lock-timeout-secs assert_not_file_has_content repo/config "lock-timeout-secs="