]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/multi-pack-index.c: let parse-options parse subcommands
authorSZEDER Gábor <szeder.dev@gmail.com>
Fri, 19 Aug 2022 16:04:05 +0000 (18:04 +0200)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Aug 2022 18:13:15 +0000 (11:13 -0700)
'git multi-pack-index' parses its subcommands with a couple of if-else
if statements.  parse-options has just learned to parse subcommands,
so let's use that facility instead, with the benefits of shorter code,
handling missing or unknown subcommands, and listing subcommands for
Bash completion.

Note that the functions implementing each subcommand only accept the
'argc' and '**argv' parameters, so add a (unused) '*prefix' parameter
to make them match the type expected by parse-options, and thus avoid
casting function pointers.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/multi-pack-index.c

index 8f24d59a7537828c2bcf52c541d2a75e0d521d7c..b8320d597ba4e8ce348d5ca5afedcf186f14cb71 100644 (file)
@@ -104,7 +104,8 @@ static void read_packs_from_stdin(struct string_list *to)
        strbuf_release(&buf);
 }
 
-static int cmd_multi_pack_index_write(int argc, const char **argv)
+static int cmd_multi_pack_index_write(int argc, const char **argv,
+                                     const char *prefix)
 {
        struct option *options;
        static struct option builtin_multi_pack_index_write_options[] = {
@@ -160,7 +161,8 @@ static int cmd_multi_pack_index_write(int argc, const char **argv)
                               opts.refs_snapshot, opts.flags);
 }
 
-static int cmd_multi_pack_index_verify(int argc, const char **argv)
+static int cmd_multi_pack_index_verify(int argc, const char **argv,
+                                      const char *prefix)
 {
        struct option *options;
        static struct option builtin_multi_pack_index_verify_options[] = {
@@ -186,7 +188,8 @@ static int cmd_multi_pack_index_verify(int argc, const char **argv)
        return verify_midx_file(the_repository, opts.object_dir, opts.flags);
 }
 
-static int cmd_multi_pack_index_expire(int argc, const char **argv)
+static int cmd_multi_pack_index_expire(int argc, const char **argv,
+                                      const char *prefix)
 {
        struct option *options;
        static struct option builtin_multi_pack_index_expire_options[] = {
@@ -212,7 +215,8 @@ static int cmd_multi_pack_index_expire(int argc, const char **argv)
        return expire_midx_packs(the_repository, opts.object_dir, opts.flags);
 }
 
-static int cmd_multi_pack_index_repack(int argc, const char **argv)
+static int cmd_multi_pack_index_repack(int argc, const char **argv,
+                                      const char *prefix)
 {
        struct option *options;
        static struct option builtin_multi_pack_index_repack_options[] = {
@@ -247,7 +251,15 @@ int cmd_multi_pack_index(int argc, const char **argv,
                         const char *prefix)
 {
        int res;
-       struct option *builtin_multi_pack_index_options = common_opts;
+       parse_opt_subcommand_fn *fn = NULL;
+       struct option builtin_multi_pack_index_options[] = {
+               OPT_SUBCOMMAND("repack", &fn, cmd_multi_pack_index_repack),
+               OPT_SUBCOMMAND("write", &fn, cmd_multi_pack_index_write),
+               OPT_SUBCOMMAND("verify", &fn, cmd_multi_pack_index_verify),
+               OPT_SUBCOMMAND("expire", &fn, cmd_multi_pack_index_expire),
+               OPT_END(),
+       };
+       struct option *options = parse_options_concat(builtin_multi_pack_index_options, common_opts);
 
        git_config(git_default_config, NULL);
 
@@ -256,31 +268,12 @@ int cmd_multi_pack_index(int argc, const char **argv,
            the_repository->objects->odb)
                opts.object_dir = xstrdup(the_repository->objects->odb->path);
 
-       argc = parse_options(argc, argv, prefix,
-                            builtin_multi_pack_index_options,
-                            builtin_multi_pack_index_usage,
-                            PARSE_OPT_STOP_AT_NON_OPTION);
-
-       if (!argc)
-               goto usage;
-
-       if (!strcmp(argv[0], "repack"))
-               res = cmd_multi_pack_index_repack(argc, argv);
-       else if (!strcmp(argv[0], "write"))
-               res =  cmd_multi_pack_index_write(argc, argv);
-       else if (!strcmp(argv[0], "verify"))
-               res =  cmd_multi_pack_index_verify(argc, argv);
-       else if (!strcmp(argv[0], "expire"))
-               res =  cmd_multi_pack_index_expire(argc, argv);
-       else {
-               error(_("unrecognized subcommand: %s"), argv[0]);
-               goto usage;
-       }
+       argc = parse_options(argc, argv, prefix, options,
+                            builtin_multi_pack_index_usage, 0);
+       FREE_AND_NULL(options);
+
+       res = fn(argc, argv, prefix);
 
        free(opts.object_dir);
        return res;
-
-usage:
-       usage_with_options(builtin_multi_pack_index_usage,
-                          builtin_multi_pack_index_options);
 }