]> git.ipfire.org Git - thirdparty/git.git/commitdiff
reflog exists: use parse_options() API
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Thu, 17 Mar 2022 18:08:38 +0000 (19:08 +0100)
committerJunio C Hamano <gitster@pobox.com>
Fri, 18 Mar 2022 01:03:12 +0000 (18:03 -0700)
Change the "reflog exists" command added in afcb2e7a3b8 (git-reflog:
add exists command, 2015-07-21) to use parse_options() instead of its
own custom command-line parser. This continues work started in
33d7bdd6459 (builtin/reflog.c: use parse-options api for expire,
delete subcommands, 2022-01-06).

As a result we'll understand the --end-of-options synonym for "--", so
let's test for that.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/reflog.c
t/t1418-reflog-exists.sh

index 458764400b5b0f5870d1c7dccabd54feb9d6dfb8..9847e9db3de4cef0b14113a81bed106aa24d66c3 100644 (file)
@@ -27,8 +27,10 @@ static const char *const reflog_delete_usage[] = {
        NULL
 };
 
-static const char reflog_exists_usage[] =
-       BUILTIN_REFLOG_EXISTS_USAGE;
+static const char *const reflog_exists_usage[] = {
+       BUILTIN_REFLOG_EXISTS_USAGE,
+       NULL,
+};
 
 static timestamp_t default_reflog_expire;
 static timestamp_t default_reflog_expire_unreachable;
@@ -350,28 +352,20 @@ static int cmd_reflog_delete(int argc, const char **argv, const char *prefix)
 
 static int cmd_reflog_exists(int argc, const char **argv, const char *prefix)
 {
-       int i, start = 0;
-
-       for (i = 1; i < argc; i++) {
-               const char *arg = argv[i];
-               if (!strcmp(arg, "--")) {
-                       i++;
-                       break;
-               }
-               else if (arg[0] == '-')
-                       usage(_(reflog_exists_usage));
-               else
-                       break;
-       }
-
-       start = i;
+       struct option options[] = {
+               OPT_END()
+       };
+       const char *refname;
 
-       if (argc - start != 1)
-               usage(_(reflog_exists_usage));
+       argc = parse_options(argc, argv, prefix, options, reflog_exists_usage,
+                            0);
+       if (!argc)
+               usage_with_options(reflog_exists_usage, options);
 
-       if (check_refname_format(argv[start], REFNAME_ALLOW_ONELEVEL))
-               die(_("invalid ref format: %s"), argv[start]);
-       return !reflog_exists(argv[start]);
+       refname = argv[0];
+       if (check_refname_format(refname, REFNAME_ALLOW_ONELEVEL))
+               die(_("invalid ref format: %s"), refname);
+       return !reflog_exists(refname);
 }
 
 /*
index 60c6411ce3ccf9955862097cae331cfbf5c40203..d51ecd5e9250f004e0b0c894b308172237e5666c 100755 (executable)
@@ -29,4 +29,9 @@ test_expect_success 'reflog exists works with a "--" delimiter' '
        test_must_fail git reflog exists -- refs/heads/nonexistent
 '
 
+test_expect_success 'reflog exists works with a "--end-of-options" delimiter' '
+       git reflog exists --end-of-options refs/heads/main &&
+       test_must_fail git reflog exists --end-of-options refs/heads/nonexistent
+'
+
 test_done