Skip to content

Commit

Permalink
midx: prevent duplicate packfile loads
Browse files Browse the repository at this point in the history
The multi-pack-index, when present, tracks the existence of objects and
their offsets within a list of packfiles. This allows us to use the
multi-pack-index for object lookups, abbreviations, and object counts.

When the multi-pack-index tracks a packfile, then we do not need to add
that packfile to the packed_git linked list or the MRU list.

We still need to load the packfiles that are not tracked by the
multi-pack-index.

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
derrickstolee authored and gitster committed Jul 20, 2018
1 parent b8990fb commit f3a002b
Showing 1 changed file with 9 additions and 0 deletions.
9 changes: 9 additions & 0 deletions packfile.c
Original file line number Diff line number Diff line change
Expand Up @@ -795,6 +795,7 @@ struct prepare_pack_data {
struct repository *r;
struct string_list *garbage;
int local;
struct multi_pack_index *m;
};

static void prepare_pack(const char *full_name, size_t full_name_len,
Expand All @@ -805,6 +806,8 @@ static void prepare_pack(const char *full_name, size_t full_name_len,
size_t base_len = full_name_len;

if (strip_suffix_mem(full_name, &base_len, ".idx")) {
if (data->m && midx_contains_pack(data->m, file_name))
return;
/* Don't reopen a pack we already have. */
for (p = data->r->objects->packed_git; p; p = p->next) {
size_t len;
Expand Down Expand Up @@ -839,6 +842,12 @@ static void prepare_packed_git_one(struct repository *r, char *objdir, int local
struct prepare_pack_data data;
struct string_list garbage = STRING_LIST_INIT_DUP;

data.m = r->objects->multi_pack_index;

/* look for the multi-pack-index for this object directory */
while (data.m && strcmp(data.m->object_dir, objdir))
data.m = data.m->next;

data.r = r;
data.garbage = &garbage;
data.local = local;
Expand Down

0 comments on commit f3a002b

Please sign in to comment.