diff options
author | Derrick Stolee <dstolee@microsoft.com> | 2018-08-20 19:52:00 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-08-21 01:31:39 +0300 |
commit | 29e2016b8f952c900b2f4ce148be5279c53fd9e3 (patch) | |
tree | 7c9b371530a900db71fb28070a16a3264534320e /midx.c | |
parent | fe86c3beb5893edd4e5648dab8cca66d6cc2e77d (diff) |
midx: fix bug that skips midx with alternates
The logic for constructing the linked list of multi-pack-indexes
in the object store is incorrect. If the local object store has
a multi-pack-index, but an alternate does not, then the list is
dropped.
Add tests that would have revealed this bug.
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'midx.c')
-rw-r--r-- | midx.c | 11 |
1 files changed, 6 insertions, 5 deletions
@@ -331,7 +331,7 @@ int midx_contains_pack(struct multi_pack_index *m, const char *idx_name) int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, int local) { - struct multi_pack_index *m = r->objects->multi_pack_index; + struct multi_pack_index *m; struct multi_pack_index *m_search; int config_value; @@ -339,14 +339,15 @@ int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, i !config_value) return 0; - for (m_search = m; m_search; m_search = m_search->next) + 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; - r->objects->multi_pack_index = load_multi_pack_index(object_dir, local); + m = load_multi_pack_index(object_dir, local); - if (r->objects->multi_pack_index) { - r->objects->multi_pack_index->next = m; + if (m) { + m->next = r->objects->multi_pack_index; + r->objects->multi_pack_index = m; return 1; } |