parse-options: rearrange long_name matching code

Move the code for handling a full match of long_name first and get rid
of negations.  Reduce the indent of the code for matching abbreviations
and remove unnecessary curly braces.  Combine the checks for whether
negation is allowed and whether arg is "n", "no" or "no-" because they
belong together and avoid a continue statement.  The result is shorter,
more readable code.

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:43 +01:00 committed by Junio C Hamano
parent b1ce2b62fa
commit 28a92478b8
1 changed files with 15 additions and 22 deletions

View File

@ -413,30 +413,23 @@ static enum parse_opt_result parse_long_opt(
if (((flags ^ opt_flags) & OPT_UNSET) && !allow_unset)
continue;
if (!skip_prefix(arg_start, long_name, &rest))
rest = NULL;
if (!rest) {
/* abbreviated? */
if (!strncmp(long_name, arg_start, arg_end - arg_start)) {
register_abbrev(p, options, flags ^ opt_flags,
&abbrev, &ambiguous);
}
/* negation allowed? */
if (options->flags & PARSE_OPT_NONEG)
if (skip_prefix(arg_start, long_name, &rest)) {
if (*rest == '=')
p->opt = rest + 1;
else if (*rest)
continue;
/* negated and abbreviated very much? */
if (starts_with("no-", arg)) {
register_abbrev(p, options, OPT_UNSET ^ opt_flags,
&abbrev, &ambiguous);
}
continue;
return get_value(p, options, flags ^ opt_flags);
}
if (*rest) {
if (*rest != '=')
continue;
p->opt = rest + 1;
}
return get_value(p, options, flags ^ opt_flags);
/* abbreviated? */
if (!strncmp(long_name, arg_start, arg_end - arg_start))
register_abbrev(p, options, flags ^ opt_flags,
&abbrev, &ambiguous);
/* negated and abbreviated very much? */
if (allow_unset && starts_with("no-", arg))
register_abbrev(p, options, OPT_UNSET ^ opt_flags,
&abbrev, &ambiguous);
}
if (disallow_abbreviated_options && (ambiguous.option || abbrev.option))