summaryrefslogtreecommitdiffstats
path: root/parse-options.c
diff options
context:
space:
mode:
authorRené Scharfe <l.s.r@web.de>2024-03-03 13:19:38 +0100
committerJunio C Hamano <gitster@pobox.com>2024-03-03 18:49:21 +0100
commit289cb15541874e5c1599fee2e145a7af39085069 (patch)
tree53f3315d77d35f6f7d108a9ef8a741207cba7b89 /parse-options.c
parentGit 2.44 (diff)
downloadgit-289cb15541874e5c1599fee2e145a7af39085069.tar.xz
git-289cb15541874e5c1599fee2e145a7af39085069.zip
parse-options: recognize abbreviated negated option with arg
Giving an argument to an option that doesn't take one causes Git to report that error specifically: $ git rm --dry-run=bogus error: option `dry-run' takes no value The same is true when the option is negated or abbreviated: $ git rm --no-dry-run=bogus error: option `no-dry-run' takes no value $ git rm --dry=bogus error: option `dry-run' takes no value Not so when doing both, though: $ git rm --no-dry=bogus error: unknown option `no-dry=bogus' usage: git rm [-f | --force] [-n] [-r] [--cached] [--ignore-unmatch] (Rest of the usage message omitted.) Improve consistency and usefulness of the error message by recognizing abbreviated negated options even if they have a (most likely bogus) argument. With this patch we get: $ git rm --no-dry=bogus error: option `no-dry-run' takes no value Signed-off-by: René Scharfe <l.s.r@web.de> Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'parse-options.c')
-rw-r--r--parse-options.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/parse-options.c b/parse-options.c
index 63a99dea6e..e4ce33ea48 100644
--- a/parse-options.c
+++ b/parse-options.c
@@ -391,7 +391,7 @@ is_abbreviated:
ambiguous_option = abbrev_option;
ambiguous_flags = abbrev_flags;
}
- if (!(flags & OPT_UNSET) && *arg_end)
+ if (*arg_end)
p->opt = arg_end + 1;
abbrev_option = options;
abbrev_flags = flags ^ opt_flags;
@@ -412,7 +412,8 @@ is_abbreviated:
if (!skip_prefix(arg + 3, long_name, &rest)) {
/* abbreviated and negated? */
if (allow_abbrev &&
- starts_with(long_name, arg + 3))
+ !strncmp(long_name, arg + 3,
+ arg_end - arg - 3))
goto is_abbreviated;
else
continue;