Skip to content

Commit 2998138

Browse files
Uwe Kleine-Königgitster
authored andcommitted
rev-parse: fix --parse-opt --keep-dashdash --stop-at-non-option
The ?: operator has a lower priority than |, so the implicit associativity made the 6th argument of parse_options be PARSE_OPT_KEEP_DASHDASH if keep_dashdash was true discarding PARSE_OPT_STOP_AT_NON_OPTION and PARSE_OPT_SHELL_EVAL. Signed-off-by: Uwe Kleine-König <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 814035c commit 2998138

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

builtin-rev-parse.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -397,8 +397,8 @@ static int cmd_parseopt(int argc, const char **argv, const char *prefix)
397397
ALLOC_GROW(opts, onb + 1, osz);
398398
memset(opts + onb, 0, sizeof(opts[onb]));
399399
argc = parse_options(argc, argv, prefix, opts, usage,
400-
keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0 |
401-
stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0);
400+
(keep_dashdash ? PARSE_OPT_KEEP_DASHDASH : 0) |
401+
(stop_at_non_option ? PARSE_OPT_STOP_AT_NON_OPTION : 0));
402402

403403
strbuf_addf(&parsed, " --");
404404
sq_quote_argv(&parsed, argv, 0);

t/t1502-rev-parse-parseopt.sh

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,4 +79,22 @@ test_expect_success 'test --parseopt --keep-dashdash' '
7979
test_cmp expect output
8080
'
8181

82+
cat >expect <<EOF
83+
set -- --foo -- '--' 'arg' '--spam=ham'
84+
EOF
85+
86+
test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option with --' '
87+
git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo -- arg --spam=ham <optionspec >output &&
88+
test_cmp expect output
89+
'
90+
91+
cat > expect <<EOF
92+
set -- --foo -- 'arg' '--spam=ham'
93+
EOF
94+
95+
test_expect_success 'test --parseopt --keep-dashdash --stop-at-non-option without --' '
96+
git rev-parse --parseopt --keep-dashdash --stop-at-non-option -- --foo arg --spam=ham <optionspec >output &&
97+
test_cmp expect output
98+
'
99+
82100
test_done

0 commit comments

Comments
 (0)