Merge branch 'ew/repack-with-bitmaps-by-default'
authorJunio C Hamano <gitster@pobox.com>
Fri, 19 Jul 2019 18:30:22 +0000 (11:30 -0700)
committerJunio C Hamano <gitster@pobox.com>
Fri, 19 Jul 2019 18:30:22 +0000 (11:30 -0700)
Generation of pack bitmaps are now disabled when .keep files exist,
as these are mutually exclusive features.

* ew/repack-with-bitmaps-by-default:
repack: disable bitmaps-by-default if .keep files exist

1  2 
builtin/repack.c
diff --combined builtin/repack.c
index d6abf74608fe1a84f6ad425c16798bfad81f69c3,73250b243157d75530067cdd9238b90adb3004a6..30982ed2a2aa750b68f1613e8f14b049708b70c4
@@@ -89,6 -89,17 +89,17 @@@ static void remove_pack_on_signal(int s
        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
@@@ -129,9 -140,19 +140,9 @@@ static void get_non_kept_pack_filenames
  
  static void remove_redundant_pack(const char *dir_name, const char *base_name)
  {
 -      const char *exts[] = {".pack", ".idx", ".keep", ".bitmap", ".promisor"};
 -      int i;
        struct strbuf buf = STRBUF_INIT;
 -      size_t plen;
 -
 -      strbuf_addf(&buf, "%s/%s", dir_name, base_name);
 -      plen = buf.len;
 -
 -      for (i = 0; i < ARRAY_SIZE(exts); i++) {
 -              strbuf_setlen(&buf, plen);
 -              strbuf_addstr(&buf, exts[i]);
 -              unlink(buf.buf);
 -      }
 +      strbuf_addf(&buf, "%s/%s.pack", dir_name, base_name);
 +      unlink_pack_path(buf.buf, 1);
        strbuf_release(&buf);
  }
  
@@@ -333,9 -354,12 +344,12 @@@ int cmd_repack(int argc, const char **a
            (unpack_unreachable || (pack_everything & LOOSEN_UNREACHABLE)))
                die(_("--keep-unreachable and -A are incompatible"));
  
-       if (write_bitmaps < 0)
+       if (write_bitmaps < 0) {
                write_bitmaps = (pack_everything & ALL_INTO_ONE) &&
-                                is_bare_repository();
+                                is_bare_repository() &&
+                                keep_pack_list.nr == 0 &&
+                                !has_pack_keep_file();
+       }
        if (pack_kept_objects < 0)
                pack_kept_objects = write_bitmaps;
  
        if (!names.nr && !po_args.quiet)
                printf_ln(_("Nothing new to pack."));
  
 -      close_all_packs(the_repository->objects);
 +      close_object_store(the_repository->objects);
  
        /*
         * Ok we have prepared all new packfiles.