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
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);
}
(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;