aboutsummaryrefslogtreecommitdiffstats
path: root/midx.c
diff options
context:
space:
mode:
authorDerrick Stolee <dstolee@microsoft.com>2018-08-20 16:52:00 +0000
committerJunio C Hamano <gitster@pobox.com>2018-08-20 15:31:39 -0700
commit29e2016b8f952c900b2f4ce148be5279c53fd9e3 (patch)
tree7c9b371530a900db71fb28070a16a3264534320e /midx.c
parentfe86c3beb5893edd4e5648dab8cca66d6cc2e77d (diff)
downloadgit-29e2016b8f952c900b2f4ce148be5279c53fd9e3.tar.gz
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.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/midx.c b/midx.c
index 7fa75a37a3..0710c4c175 100644
--- a/midx.c
+++ b/midx.c
@@ -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;
}