diff options
author | Jonathan Lebon <jonathan@jlebon.com> | 2019-08-13 15:05:09 -0400 |
---|---|---|
committer | Atomic Bot <atomic-devel@projectatomic.io> | 2019-08-14 12:31:10 +0000 |
commit | 0c48769de3965b9d62688f671e95267b3f40c998 (patch) | |
tree | 1d13bea4094355721f36e03b80fe36984b863fe9 /src/ostree | |
parent | ab73d9f5258a202d0c2a514688091be4db6622e0 (diff) | |
download | ostree-0c48769de3965b9d62688f671e95267b3f40c998.tar.gz |
bin: Better handle --
We would stop passing through `--` and args after it to the underlying
command in `ostree_run`. This made it impossible to use `--` to tell the
parser that following args starting with `-` really are positional.
AFAICT, that logic for `--` here came from a time when we parse options
manually in a big loop, in which case breaking out made sense (see
97558276e4f855442337be01abc8f90cf0dd1810).
There's an extra step here, which is that glib by default leaves the
`--` in the list of args, so we need to take care to remove it from the
list after parsing.
Closes: #1898
Closes: #1899
Approved by: rfairley
Diffstat (limited to 'src/ostree')
-rw-r--r-- | src/ostree/ot-main.c | 21 |
1 files changed, 16 insertions, 5 deletions
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 |