aboutsummaryrefslogtreecommitdiffstats
path: root/midx.c
diff options
context:
space:
mode:
Diffstat (limited to 'midx.c')
-rw-r--r--midx.c19
1 files changed, 11 insertions, 8 deletions
diff --git a/midx.c b/midx.c
index 3c5bc82173..2f64c26058 100644
--- a/midx.c
+++ b/midx.c
@@ -724,28 +724,29 @@ int midx_preferred_pack(struct multi_pack_index *m, uint32_t *pack_int_id)
return 0;
}
-int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local)
+int prepare_multi_pack_index_one(struct odb_source *source, int local)
{
+ struct repository *r = source->odb->repo;
struct multi_pack_index *m;
- struct multi_pack_index *m_search;
prepare_repo_settings(r);
if (!r->settings.core_multi_pack_index)
return 0;
- for (m_search = r->objects->multi_pack_index; m_search; m_search = m_search->next)
- if (!strcmp(object_dir, m_search->object_dir))
- return 1;
-
- m = load_multi_pack_index(r, object_dir, local);
+ if (source->midx)
+ return 1;
+ m = load_multi_pack_index(r, source->path, local);
if (m) {
struct multi_pack_index *mp = r->objects->multi_pack_index;
if (mp) {
m->next = mp->next;
mp->next = m;
- } else
+ } else {
r->objects->multi_pack_index = m;
+ }
+ source->midx = m;
+
return 1;
}
@@ -837,6 +838,8 @@ void clear_midx_file(struct repository *r)
if (r->objects && r->objects->multi_pack_index) {
close_midx(r->objects->multi_pack_index);
r->objects->multi_pack_index = NULL;
+ for (struct odb_source *source = r->objects->sources; source; source = source->next)
+ source->midx = NULL;
}
if (remove_path(midx.buf))