parse-options: set arg of abbreviated option lazily

Postpone setting the opt pointer until we're about to call get_value(),
which uses it.  There's no point in setting it eagerly for every
abbreviated candidate option, which may turn out to be ambiguous.
Removing this assignment from the loop doesn't noticeably improve the
performance, but allows further simplification.

Signed-off-by: René Scharfe <l.s.r@web.de>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
René Scharfe 2024-03-03 13:19:39 +01:00 committed by Junio C Hamano
parent 289cb15541
commit 597f9d037d

View File

@ -391,8 +391,6 @@ static enum parse_opt_result parse_long_opt(
ambiguous_option = abbrev_option;
ambiguous_flags = abbrev_flags;
}
if (*arg_end)
p->opt = arg_end + 1;
abbrev_option = options;
abbrev_flags = flags ^ opt_flags;
continue;
@ -441,8 +439,11 @@ static enum parse_opt_result parse_long_opt(
abbrev_option->long_name);
return PARSE_OPT_HELP;
}
if (abbrev_option)
if (abbrev_option) {
if (*arg_end)
p->opt = arg_end + 1;
return get_value(p, abbrev_option, abbrev_flags);
}
return PARSE_OPT_UNKNOWN;
}