]> git.ipfire.org Git - thirdparty/git.git/commitdiff
bundle API: change "flags" to be "extra_index_pack_args"
authorÆvar Arnfjörð Bjarmason <avarab@gmail.com>
Sun, 5 Sep 2021 07:34:43 +0000 (09:34 +0200)
committerJunio C Hamano <gitster@pobox.com>
Tue, 7 Sep 2021 17:59:23 +0000 (10:59 -0700)
Since the "flags" parameter was added in be042aff24c (Teach progress
eye-candy to fetch_refs_from_bundle(), 2011-09-18) there's never been
more than the one flag: BUNDLE_VERBOSE.

Let's have the only caller who cares about that pass "-v" itself
instead through new "extra_index_pack_args" parameter. The flexibility
of being able to pass arbitrary arguments to "unbundle" will be used
in a subsequent commit.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/bundle.c
bundle.c
bundle.h
transport.c

index 053a51bea1b2ef5c6448deaa70698b7b0d164f44..9b86c8529c79b784f9528599c6eda7a540cc0f9f 100644 (file)
@@ -166,6 +166,7 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
                OPT_END()
        };
        char *bundle_file;
+       struct strvec extra_index_pack_args = STRVEC_INIT;
 
        argc = parse_options_cmd_bundle(argc, argv, prefix,
                        builtin_bundle_unbundle_usage, options, &bundle_file);
@@ -177,7 +178,8 @@ static int cmd_bundle_unbundle(int argc, const char **argv, const char *prefix)
        }
        if (!startup_info->have_repository)
                die(_("Need a repository to unbundle."));
-       ret = !!unbundle(the_repository, &header, bundle_fd, 0) ||
+       ret = !!unbundle(the_repository, &header, bundle_fd,
+                        &extra_index_pack_args) ||
                list_bundle_refs(&header, argc, argv);
        bundle_header_release(&header);
 cleanup:
index ab63f4022616ba85a81fd2d96ff016fe96224fc4..a0bb687b0f4ea30d44883dcb9d4de5bf1e5963ea 100644 (file)
--- a/bundle.c
+++ b/bundle.c
@@ -569,18 +569,18 @@ err:
 }
 
 int unbundle(struct repository *r, struct bundle_header *header,
-            int bundle_fd, int flags)
+            int bundle_fd, struct strvec *extra_index_pack_args)
 {
-       const char *argv_index_pack[] = {"index-pack",
-                                        "--fix-thin", "--stdin", NULL, NULL};
        struct child_process ip = CHILD_PROCESS_INIT;
+       strvec_pushl(&ip.args, "index-pack", "--fix-thin", "--stdin", NULL);
 
-       if (flags & BUNDLE_VERBOSE)
-               argv_index_pack[3] = "-v";
+       if (extra_index_pack_args) {
+               strvec_pushv(&ip.args, extra_index_pack_args->v);
+               strvec_clear(extra_index_pack_args);
+       }
 
        if (verify_bundle(r, header, 0))
                return -1;
-       ip.argv = argv_index_pack;
        ip.in = bundle_fd;
        ip.no_stdout = 1;
        ip.git_cmd = 1;
index 84a6df1b65d703ff88cddd8e71d2f1918b309379..06009fe6b1f00b939350ba88ba7bf8f72565de4c 100644 (file)
--- a/bundle.h
+++ b/bundle.h
@@ -26,16 +26,19 @@ int create_bundle(struct repository *r, const char *path,
                  int argc, const char **argv, struct strvec *pack_options,
                  int version);
 int verify_bundle(struct repository *r, struct bundle_header *header, int verbose);
-#define BUNDLE_VERBOSE 1
 
 /**
  * Unbundle after reading the header with read_bundle_header().
  *
  * We'll invoke "git index-pack --stdin --fix-thin" for you on the
  * provided `bundle_fd` from read_bundle_header().
+ *
+ * Provide "extra_index_pack_args" to pass any extra arguments
+ * (e.g. "-v" for verbose/progress), NULL otherwise. The provided
+ * "extra_index_pack_args" (if any) will be strvec_clear()'d for you.
  */
 int unbundle(struct repository *r, struct bundle_header *header,
-            int bundle_fd, int flags);
+            int bundle_fd, struct strvec *extra_index_pack_args);
 int list_bundle_refs(struct bundle_header *header,
                int argc, const char **argv);
 
index 17e9629710a2f8053c2657be91425b1aab840991..ab9b03ae9ff11a60dec619e3b749f4ff4b0d4aba 100644 (file)
@@ -162,12 +162,16 @@ static int fetch_refs_from_bundle(struct transport *transport,
                               int nr_heads, struct ref **to_fetch)
 {
        struct bundle_transport_data *data = transport->data;
+       struct strvec extra_index_pack_args = STRVEC_INIT;
        int ret;
 
+       if (transport->progress)
+               strvec_push(&extra_index_pack_args, "-v");
+
        if (!data->get_refs_from_bundle_called)
                get_refs_from_bundle(transport, 0, NULL);
        ret = unbundle(the_repository, &data->header, data->fd,
-                          transport->progress ? BUNDLE_VERBOSE : 0);
+                      &extra_index_pack_args);
        transport->hash_algo = data->header.hash_algo;
        return ret;
 }