Merge branch 'tb/remove-unused-pack-bitmap'
When creating a multi-pack bitmap, remove per-pack bitmap files unconditionally as they will never be consulted. * tb/remove-unused-pack-bitmap: builtin/repack.c: remove redundant pack-based bitmaps
This commit is contained in:
commit
c5dd7773e1
@ -661,6 +661,35 @@ static int write_midx_included_packs(struct string_list *include,
|
|||||||
return finish_command(&cmd);
|
return finish_command(&cmd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void remove_redundant_bitmaps(struct string_list *include,
|
||||||
|
const char *packdir)
|
||||||
|
{
|
||||||
|
struct strbuf path = STRBUF_INIT;
|
||||||
|
struct string_list_item *item;
|
||||||
|
size_t packdir_len;
|
||||||
|
|
||||||
|
strbuf_addstr(&path, packdir);
|
||||||
|
strbuf_addch(&path, '/');
|
||||||
|
packdir_len = path.len;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Remove any pack bitmaps corresponding to packs which are now
|
||||||
|
* included in the MIDX.
|
||||||
|
*/
|
||||||
|
for_each_string_list_item(item, include) {
|
||||||
|
strbuf_addstr(&path, item->string);
|
||||||
|
strbuf_strip_suffix(&path, ".idx");
|
||||||
|
strbuf_addstr(&path, ".bitmap");
|
||||||
|
|
||||||
|
if (unlink(path.buf) && errno != ENOENT)
|
||||||
|
warning_errno(_("could not remove stale bitmap: %s"),
|
||||||
|
path.buf);
|
||||||
|
|
||||||
|
strbuf_setlen(&path, packdir_len);
|
||||||
|
}
|
||||||
|
strbuf_release(&path);
|
||||||
|
}
|
||||||
|
|
||||||
static int write_cruft_pack(const struct pack_objects_args *args,
|
static int write_cruft_pack(const struct pack_objects_args *args,
|
||||||
const char *pack_prefix,
|
const char *pack_prefix,
|
||||||
struct string_list *names,
|
struct string_list *names,
|
||||||
@ -1059,6 +1088,9 @@ int cmd_repack(int argc, const char **argv, const char *prefix)
|
|||||||
refs_snapshot ? get_tempfile_path(refs_snapshot) : NULL,
|
refs_snapshot ? get_tempfile_path(refs_snapshot) : NULL,
|
||||||
show_progress, write_bitmaps > 0);
|
show_progress, write_bitmaps > 0);
|
||||||
|
|
||||||
|
if (!ret && write_bitmaps)
|
||||||
|
remove_redundant_bitmaps(&include, packdir);
|
||||||
|
|
||||||
string_list_clear(&include, 0);
|
string_list_clear(&include, 0);
|
||||||
|
|
||||||
if (ret)
|
if (ret)
|
||||||
|
@ -426,6 +426,27 @@ test_expect_success '--write-midx -b packs non-kept objects' '
|
|||||||
)
|
)
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success '--write-midx removes stale pack-based bitmaps' '
|
||||||
|
rm -fr repo &&
|
||||||
|
git init repo &&
|
||||||
|
test_when_finished "rm -fr repo" &&
|
||||||
|
(
|
||||||
|
cd repo &&
|
||||||
|
test_commit base &&
|
||||||
|
GIT_TEST_MULTI_PACK_INDEX=0 git repack -Ab &&
|
||||||
|
|
||||||
|
pack_bitmap=$(ls $objdir/pack/pack-*.bitmap) &&
|
||||||
|
test_path_is_file "$pack_bitmap" &&
|
||||||
|
|
||||||
|
test_commit tip &&
|
||||||
|
GIT_TEST_MULTI_PACK_INDEX=0 git repack -bm &&
|
||||||
|
|
||||||
|
test_path_is_file $midx &&
|
||||||
|
test_path_is_file $midx-$(midx_checksum $objdir).bitmap &&
|
||||||
|
test_path_is_missing $pack_bitmap
|
||||||
|
)
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success '--write-midx with --pack-kept-objects' '
|
test_expect_success '--write-midx with --pack-kept-objects' '
|
||||||
git init repo &&
|
git init repo &&
|
||||||
test_when_finished "rm -fr repo" &&
|
test_when_finished "rm -fr repo" &&
|
||||||
|
Loading…
Reference in New Issue
Block a user