mirror of
https://github.com/git/git.git
synced 2025-12-12 20:36:24 +01:00
packfile: introduce function to load and add packfiles
We have a recurring pattern where we essentially perform an upsert of a packfile in case it isn't yet known by the packfile store. The logic to do so is non-trivial as we have to reconstruct the packfile's key, check the map of packfiles, then create the new packfile and finally add it to the store. Introduce a new function that does this dance for us. Refactor callsites to use it. Signed-off-by: Patrick Steinhardt <ps@pks.im> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
committed by
Junio C Hamano
parent
f6f236d926
commit
d67530f6bb
23
midx.c
23
midx.c
@@ -443,7 +443,6 @@ int prepare_midx_pack(struct multi_pack_index *m,
|
||||
{
|
||||
struct repository *r = m->source->odb->repo;
|
||||
struct strbuf pack_name = STRBUF_INIT;
|
||||
struct strbuf key = STRBUF_INIT;
|
||||
struct packed_git *p;
|
||||
|
||||
pack_int_id = midx_for_pack(&m, pack_int_id);
|
||||
@@ -455,25 +454,11 @@ int prepare_midx_pack(struct multi_pack_index *m,
|
||||
|
||||
strbuf_addf(&pack_name, "%s/pack/%s", m->source->path,
|
||||
m->pack_names[pack_int_id]);
|
||||
|
||||
/* pack_map holds the ".pack" name, but we have the .idx */
|
||||
strbuf_addbuf(&key, &pack_name);
|
||||
strbuf_strip_suffix(&key, ".idx");
|
||||
strbuf_addstr(&key, ".pack");
|
||||
p = hashmap_get_entry_from_hash(&r->objects->packfiles->map,
|
||||
strhash(key.buf), key.buf,
|
||||
struct packed_git, packmap_ent);
|
||||
if (!p) {
|
||||
p = add_packed_git(r, pack_name.buf, pack_name.len,
|
||||
m->source->local);
|
||||
if (p) {
|
||||
packfile_store_add_pack(r->objects->packfiles, p);
|
||||
list_add_tail(&p->mru, &r->objects->packfiles->mru);
|
||||
}
|
||||
}
|
||||
|
||||
p = packfile_store_load_pack(r->objects->packfiles,
|
||||
pack_name.buf, m->source->local);
|
||||
if (p)
|
||||
list_add_tail(&p->mru, &r->objects->packfiles->mru);
|
||||
strbuf_release(&pack_name);
|
||||
strbuf_release(&key);
|
||||
|
||||
if (!p) {
|
||||
m->packs[pack_int_id] = MIDX_PACK_ERROR;
|
||||
|
||||
Reference in New Issue
Block a user