Merge branch 'js/gitdir-at-unc-root'
[gitweb.git] / builtin / repack.c
index 30982ed2a2aa750b68f1613e8f14b049708b70c4..3b3dd1437299a53a9031572820c12f3269922695 100644 (file)
@@ -11,6 +11,7 @@
 #include "midx.h"
 #include "packfile.h"
 #include "object-store.h"
+#include "promisor-remote.h"
 
 static int delta_base_offset = 1;
 static int pack_kept_objects = -1;
@@ -89,17 +90,6 @@ static void remove_pack_on_signal(int signo)
        raise(signo);
 }
 
-static int has_pack_keep_file(void)
-{
-       struct packed_git *p;
-
-       for (p = get_all_packs(the_repository); p; p = p->next) {
-               if (p->pack_keep)
-                       return 1;
-       }
-       return 0;
-}
-
 /*
  * Adds all packs hex strings to the fname list, which do not
  * have a corresponding .keep file. These packs are not to
@@ -345,13 +335,12 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
                die(_("--keep-unreachable and -A are incompatible"));
 
        if (write_bitmaps < 0) {
-               write_bitmaps = (pack_everything & ALL_INTO_ONE) &&
-                                is_bare_repository() &&
-                                keep_pack_list.nr == 0 &&
-                                !has_pack_keep_file();
+               if (!(pack_everything & ALL_INTO_ONE) ||
+                   !is_bare_repository())
+                       write_bitmaps = 0;
        }
        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));
@@ -373,10 +362,12 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
        argv_array_push(&cmd.args, "--all");
        argv_array_push(&cmd.args, "--reflog");
        argv_array_push(&cmd.args, "--indexed-objects");
-       if (repository_format_partial_clone)
+       if (has_promisor_remote())
                argv_array_push(&cmd.args, "--exclude-promisor-objects");
-       if (write_bitmaps)
+       if (write_bitmaps > 0)
                argv_array_push(&cmd.args, "--write-bitmap-index");
+       else if (write_bitmaps < 0)
+               argv_array_push(&cmd.args, "--write-bitmap-index-quiet");
        if (use_delta_islands)
                argv_array_push(&cmd.args, "--delta-islands");