]> git.ipfire.org Git - thirdparty/git.git/commitdiff
parse-options: rearrange long_name matching code
authorRené Scharfe <l.s.r@web.de>
Sun, 3 Mar 2024 12:19:43 +0000 (13:19 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sun, 3 Mar 2024 17:49:22 +0000 (09:49 -0800)
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>
parse-options.c

index d45efa4e5ccc9d3c8a3219c6e0d0d122a6a9de24..30b9e68f8ac85df1c6700d7a512eef618988b06c 100644 (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))