aboutsummaryrefslogtreecommitdiff
path: root/builtin/repack.c
diff options
context:
space:
mode:
Diffstat (limited to 'builtin/repack.c')
-rw-r--r--builtin/repack.c24
1 files changed, 21 insertions, 3 deletions
diff --git a/builtin/repack.c b/builtin/repack.c
index cfdb4c0920..4c5a82c2c8 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -332,6 +332,9 @@ int cmd_repack(int argc,
!(pack_everything & PACK_CRUFT))
strvec_push(&cmd.args, "--pack-loose-unreachable");
} else if (geometry.split_factor) {
+ pack_geometry_repack_promisors(repo, &po_args, &geometry,
+ &names, packtmp);
+
if (midx_must_contain_cruft)
strvec_push(&cmd.args, "--stdin-packs");
else
@@ -366,8 +369,23 @@ int cmd_repack(int argc,
*/
for (i = 0; i < geometry.split; i++)
fprintf(in, "%s\n", pack_basename(geometry.pack[i]));
- for (i = geometry.split; i < geometry.pack_nr; i++)
- fprintf(in, "^%s\n", pack_basename(geometry.pack[i]));
+ for (i = geometry.split; i < geometry.pack_nr; i++) {
+ const char *basename = pack_basename(geometry.pack[i]);
+ char marker = '^';
+
+ if (!midx_must_contain_cruft &&
+ !string_list_has_string(&existing.midx_packs,
+ basename)) {
+ /*
+ * Assume non-MIDX'd packs are not
+ * necessarily closed under
+ * reachability.
+ */
+ marker = '!';
+ }
+
+ fprintf(in, "%c%s\n", marker, basename);
+ }
fclose(in);
}
@@ -488,7 +506,7 @@ int cmd_repack(int argc,
string_list_sort(&names);
- close_object_store(repo->objects);
+ odb_close(repo->objects);
/*
* Ok we have prepared all new packfiles.