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:
Junio C Hamano
2023-04-27 16:00:59 -07:00
14 changed files with 62 additions and 26 deletions

View File

@@ -207,6 +207,9 @@ static int load_revindex_from_disk(char *revindex_name,
size_t revindex_size;
struct revindex_header *hdr;
if (git_env_bool(GIT_TEST_REV_INDEX_DIE_ON_DISK, 0))
die("dying as requested by '%s'", GIT_TEST_REV_INDEX_DIE_ON_DISK);
fd = git_open(revindex_name);
if (fd < 0) {
@@ -285,12 +288,15 @@ cleanup:
return ret;
}
int load_pack_revindex(struct packed_git *p)
int load_pack_revindex(struct repository *r, struct packed_git *p)
{
if (p->revindex || p->revindex_data)
return 0;
if (!load_pack_revindex_from_disk(p))
prepare_repo_settings(r);
if (r->settings.pack_read_reverse_index &&
!load_pack_revindex_from_disk(p))
return 0;
else if (!create_pack_revindex_in_memory(p))
return 0;
@@ -358,7 +364,7 @@ int offset_to_pack_pos(struct packed_git *p, off_t ofs, uint32_t *pos)
{
unsigned lo, hi;
if (load_pack_revindex(p) < 0)
if (load_pack_revindex(the_repository, p) < 0)
return -1;
lo = 0;