Jeff King <p...@peff.net> wrote:
> Pruning generally has to traverse the whole commit graph in order to
> see which objects are reachable. This is the exact problem that
> reachability bitmaps were meant to solve, so let's use them (if they're
> available, of course).

Perhaps this is good impetus for doing bitmaps by default?

It would make life easier for people new to hosting git servers
(and hopefully reduce centralization :)


I started working on it, but t0410-partial-clone.sh fails with
"Failed to write bitmap index. Packfile doesn't have full
closure"; so more work needs to be done w.r.t. default behavior
on partial clones...

Here's my WIP:

diff --git a/builtin/repack.c b/builtin/repack.c
index 67f8978043..ca98d32715 100644
--- a/builtin/repack.c
+++ b/builtin/repack.c
@@ -14,7 +14,7 @@
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
-static int write_bitmaps;
+static int write_bitmaps = -1;
 static int use_delta_islands;
 static char *packdir, *packtmp;
 
@@ -344,10 +344,14 @@ int cmd_repack(int argc, const char **argv, const char 
*prefix)
                die(_("--keep-unreachable and -A are incompatible"));
 
        if (pack_kept_objects < 0)
-               pack_kept_objects = write_bitmaps;
+               pack_kept_objects = write_bitmaps > 0;
 
-       if (write_bitmaps && !(pack_everything & ALL_INTO_ONE))
-               die(_(incremental_bitmap_conflict_error));
+       if (!(pack_everything & ALL_INTO_ONE)) {
+               if (write_bitmaps > 0)
+                       die(_(incremental_bitmap_conflict_error));
+       } else if (write_bitmaps < 0) {
+               write_bitmaps = 1;
+       }
 
        packdir = mkpathdup("%s/pack", get_object_directory());
        packtmp = mkpathdup("%s/.tmp-%d-pack", packdir, (int)getpid());
@@ -368,7 +372,7 @@ int cmd_repack(int argc, const char **argv, const char 
*prefix)
        argv_array_push(&cmd.args, "--indexed-objects");
        if (repository_format_partial_clone)
                argv_array_push(&cmd.args, "--exclude-promisor-objects");
-       if (write_bitmaps)
+       if (write_bitmaps > 0)
                argv_array_push(&cmd.args, "--write-bitmap-index");
        if (use_delta_islands)
                argv_array_push(&cmd.args, "--delta-islands");

Reply via email to