]> git.ipfire.org Git - thirdparty/git.git/commitdiff
builtin/repack.c: pass `write_pack_opts` to `finish_pack_objects_cmd()`
authorTaylor Blau <me@ttaylorr.com>
Wed, 15 Oct 2025 22:29:27 +0000 (18:29 -0400)
committerJunio C Hamano <gitster@pobox.com>
Thu, 16 Oct 2025 17:08:56 +0000 (10:08 -0700)
To prepare to move the `finish_pack_objects_cmd()` function out of the
builtin and into the repack.h API, there are a couple of things we need
to do first:

 - First, let's take advantage of `write_pack_opts_is_local()` function
   introduced in the previous commit instead of passing "local"
   explicitly.

 - Let's also avoid referring to the static 'packtmp' field within
   builtin/repack.c by instead accessing it through the write_pack_opts
   argument.

There are three callers which need to adjust themselves in order to
account for this change. The callers which reside in write_cruft_pack()
and write_filtered_pack() both already have an "opts" in scope, so they
can pass it through transparently.

The other call (at the bottom of `cmd_repack()`) needs to initialize its
own write_pack_opts to pass the necessary fields over to the direct call
to `finish_pack_objects_cmd()`.

Signed-off-by: Taylor Blau <me@ttaylorr.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/repack.c

index d1449cfe13717ed823c8031ee8a4d061b4f55758..5f382aaf196c3e77410957094204e1bf2714f76a 100644 (file)
@@ -108,11 +108,12 @@ static int repack_config(const char *var, const char *value,
 }
 
 static int finish_pack_objects_cmd(const struct git_hash_algo *algop,
+                                  const struct write_pack_opts *opts,
                                   struct child_process *cmd,
-                                  struct string_list *names,
-                                  int local)
+                                  struct string_list *names)
 {
        FILE *out;
+       bool local = write_pack_opts_is_local(opts);
        struct strbuf line = STRBUF_INIT;
 
        out = xfdopen(cmd->out, "r");
@@ -128,7 +129,8 @@ static int finish_pack_objects_cmd(const struct git_hash_algo *algop,
                 */
                if (local) {
                        item = string_list_append(names, line.buf);
-                       item->util = generated_pack_populate(line.buf, packtmp);
+                       item->util = generated_pack_populate(line.buf,
+                                                            opts->packtmp);
                }
        }
        fclose(out);
@@ -147,7 +149,6 @@ static int write_filtered_pack(const struct write_pack_opts *opts,
        FILE *in;
        int ret;
        const char *caret;
-       bool local = write_pack_opts_is_local(opts);
        const char *pack_prefix = write_pack_opts_pack_prefix(opts);
 
        prepare_pack_objects(&cmd, opts->po_args, opts->destination);
@@ -183,8 +184,8 @@ static int write_filtered_pack(const struct write_pack_opts *opts,
                fprintf(in, "%s%s.pack\n", caret, item->string);
        fclose(in);
 
-       return finish_pack_objects_cmd(existing->repo->hash_algo, &cmd, names,
-                                      local);
+       return finish_pack_objects_cmd(existing->repo->hash_algo, opts, &cmd,
+                                      names);
 }
 
 static void combine_small_cruft_packs(FILE *in, size_t combine_cruft_below_size,
@@ -231,7 +232,6 @@ static int write_cruft_pack(const struct write_pack_opts *opts,
        struct string_list_item *item;
        FILE *in;
        int ret;
-       bool local = write_pack_opts_is_local(opts);
        const char *pack_prefix = write_pack_opts_pack_prefix(opts);
 
        prepare_pack_objects(&cmd, opts->po_args, opts->destination);
@@ -279,8 +279,8 @@ static int write_cruft_pack(const struct write_pack_opts *opts,
                fprintf(in, "%s.pack\n", item->string);
        fclose(in);
 
-       return finish_pack_objects_cmd(existing->repo->hash_algo, &cmd, names,
-                                      local);
+       return finish_pack_objects_cmd(existing->repo->hash_algo, opts, &cmd,
+                                      names);
 }
 
 int cmd_repack(int argc,
@@ -560,9 +560,17 @@ int cmd_repack(int argc,
                fclose(in);
        }
 
-       ret = finish_pack_objects_cmd(repo->hash_algo, &cmd, &names, 1);
-       if (ret)
-               goto cleanup;
+       {
+               struct write_pack_opts opts = {
+                       .packdir = packdir,
+                       .destination = packdir,
+                       .packtmp = packtmp,
+               };
+               ret = finish_pack_objects_cmd(repo->hash_algo, &opts, &cmd,
+                                             &names);
+               if (ret)
+                       goto cleanup;
+       }
 
        if (!names.nr) {
                if (!po_args.quiet)