Merge branch 'tb/pack-revindex-on-disk'
The on-disk reverse index that allows mapping from the pack offset to the object name for the object stored at the offset has been enabled by default. * tb/pack-revindex-on-disk: t: invert `GIT_TEST_WRITE_REV_INDEX` config: enable `pack.writeReverseIndex` by default pack-revindex: introduce `pack.readReverseIndex` pack-revindex: introduce GIT_TEST_REV_INDEX_DIE_ON_DISK pack-revindex: make `load_pack_revindex` take a repository t5325: mark as leak-free pack-write.c: plug a leak in stage_tmp_packfiles()
This commit is contained in:
@ -465,7 +465,7 @@ static int open_pack_bitmap_1(struct bitmap_index *bitmap_git, struct packed_git
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int load_reverse_index(struct bitmap_index *bitmap_git)
|
||||
static int load_reverse_index(struct repository *r, struct bitmap_index *bitmap_git)
|
||||
{
|
||||
if (bitmap_is_midx(bitmap_git)) {
|
||||
uint32_t i;
|
||||
@ -479,23 +479,23 @@ static int load_reverse_index(struct bitmap_index *bitmap_git)
|
||||
* since we will need to make use of them in pack-objects.
|
||||
*/
|
||||
for (i = 0; i < bitmap_git->midx->num_packs; i++) {
|
||||
ret = load_pack_revindex(bitmap_git->midx->packs[i]);
|
||||
ret = load_pack_revindex(r, bitmap_git->midx->packs[i]);
|
||||
if (ret)
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
return load_pack_revindex(bitmap_git->pack);
|
||||
return load_pack_revindex(r, bitmap_git->pack);
|
||||
}
|
||||
|
||||
static int load_bitmap(struct bitmap_index *bitmap_git)
|
||||
static int load_bitmap(struct repository *r, struct bitmap_index *bitmap_git)
|
||||
{
|
||||
assert(bitmap_git->map);
|
||||
|
||||
bitmap_git->bitmaps = kh_init_oid_map();
|
||||
bitmap_git->ext_index.positions = kh_init_oid_pos();
|
||||
|
||||
if (load_reverse_index(bitmap_git))
|
||||
if (load_reverse_index(r, bitmap_git))
|
||||
goto failed;
|
||||
|
||||
if (!(bitmap_git->commits = read_bitmap_1(bitmap_git)) ||
|
||||
@ -582,7 +582,7 @@ struct bitmap_index *prepare_bitmap_git(struct repository *r)
|
||||
{
|
||||
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
|
||||
|
||||
if (!open_bitmap(r, bitmap_git) && !load_bitmap(bitmap_git))
|
||||
if (!open_bitmap(r, bitmap_git) && !load_bitmap(r, bitmap_git))
|
||||
return bitmap_git;
|
||||
|
||||
free_bitmap_index(bitmap_git);
|
||||
@ -591,9 +591,10 @@ struct bitmap_index *prepare_bitmap_git(struct repository *r)
|
||||
|
||||
struct bitmap_index *prepare_midx_bitmap_git(struct multi_pack_index *midx)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
struct bitmap_index *bitmap_git = xcalloc(1, sizeof(*bitmap_git));
|
||||
|
||||
if (!open_midx_bitmap_1(bitmap_git, midx) && !load_bitmap(bitmap_git))
|
||||
if (!open_midx_bitmap_1(bitmap_git, midx) && !load_bitmap(r, bitmap_git))
|
||||
return bitmap_git;
|
||||
|
||||
free_bitmap_index(bitmap_git);
|
||||
@ -1594,7 +1595,7 @@ struct bitmap_index *prepare_bitmap_walk(struct rev_info *revs,
|
||||
* from disk. this is the point of no return; after this the rev_list
|
||||
* becomes invalidated and we must perform the revwalk through bitmaps
|
||||
*/
|
||||
if (load_bitmap(bitmap_git) < 0)
|
||||
if (load_bitmap(revs->repo, bitmap_git) < 0)
|
||||
goto cleanup;
|
||||
|
||||
object_array_clear(&revs->pending);
|
||||
@ -1744,6 +1745,7 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
|
||||
uint32_t *entries,
|
||||
struct bitmap **reuse_out)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
struct packed_git *pack;
|
||||
struct bitmap *result = bitmap_git->result;
|
||||
struct bitmap *reuse;
|
||||
@ -1754,7 +1756,7 @@ int reuse_partial_packfile_from_bitmap(struct bitmap_index *bitmap_git,
|
||||
|
||||
assert(result);
|
||||
|
||||
load_reverse_index(bitmap_git);
|
||||
load_reverse_index(r, bitmap_git);
|
||||
|
||||
if (bitmap_is_midx(bitmap_git))
|
||||
pack = bitmap_git->midx->packs[midx_preferred_pack(bitmap_git)];
|
||||
@ -2134,11 +2136,12 @@ int rebuild_bitmap(const uint32_t *reposition,
|
||||
uint32_t *create_bitmap_mapping(struct bitmap_index *bitmap_git,
|
||||
struct packing_data *mapping)
|
||||
{
|
||||
struct repository *r = the_repository;
|
||||
uint32_t i, num_objects;
|
||||
uint32_t *reposition;
|
||||
|
||||
if (!bitmap_is_midx(bitmap_git))
|
||||
load_reverse_index(bitmap_git);
|
||||
load_reverse_index(r, bitmap_git);
|
||||
else if (load_midx_revindex(bitmap_git->midx) < 0)
|
||||
BUG("rebuild_existing_bitmaps: missing required rev-cache "
|
||||
"extension");
|
||||
|
Reference in New Issue
Block a user