parse-options.h: move PARSE_OPT_SHELL_EVAL between enums

Fix a bad landmine of a bug which has been with us ever since PARSE_OPT_SHELL_EVAL was added in 47e9cd28f8a (parseopt: wrap rev-parse --parseopt usage for eval consumption, 2010-06-12). It's an argument to parse_options() and should therefore be in "enum parse_opt_flags", but it was added to the per-option "enum parse_opt_option_flags" by mistake. Therefore as soon as we'd have an enum member in the former that reached its value of "1 << 8" we'd run into a seemingly bizarre bug where that new option would turn on the unrelated PARSE_OPT_SHELL_EVAL in "git rev-parse --parseopt" by proxy. I manually checked that no other enum members suffered from such overlap, by setting the values to non-overlapping values, and making the relevant codepaths BUG() out if the given value was above/below the expected (excluding flags=0 in the case of "enum parse_opt_flags"). Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Sep 28, 2021 at 15:14 UTC 3b723f722df6578926705c754a170c11acdbff63
1 file changed +1 -1
parse-options.h
+1 -1
@@ -33,6 +33,7 @@ enum parse_opt_flags {
33 PARSE_OPT_KEEP_UNKNOWN = 1 << 3,
34 PARSE_OPT_NO_INTERNAL_HELP = 1 << 4,
35 PARSE_OPT_ONE_SHOT = 1 << 5,
36 + PARSE_OPT_SHELL_EVAL = 1 << 6,
37 };
38
39 enum parse_opt_option_flags {
@@ -44,7 +45,6 @@ enum parse_opt_option_flags {
45 PARSE_OPT_NODASH = 1 << 5,
46 PARSE_OPT_LITERAL_ARGHELP = 1 << 6,
47 PARSE_OPT_FROM_ALIAS = 1 << 7,
47 - PARSE_OPT_SHELL_EVAL = 1 << 8,
48 PARSE_OPT_NOCOMPLETE = 1 << 9,
49 PARSE_OPT_COMP_ARG = 1 << 10,
50 PARSE_OPT_CMDMODE = 1 << 11,