diff options
author | Junio C Hamano <gitster@pobox.com> | 2018-11-13 14:37:19 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2018-11-13 14:37:19 +0100 |
commit | 5fb9263295b425c7acfde66c8abe5d53fa55d2c3 (patch) | |
tree | 8e62ddfccfdc49a24407fcf1eafc67e5548fdfd8 /midx.c | |
parent | Merge branch 'nd/wildmatch-double-asterisk' (diff) | |
parent | packfile: close multi-pack-index in close_all_packs (diff) | |
download | git-5fb9263295b425c7acfde66c8abe5d53fa55d2c3.tar.xz git-5fb9263295b425c7acfde66c8abe5d53fa55d2c3.zip |
Merge branch 'ds/test-multi-pack-index'
Tests for the recently introduced multi-pack index machinery.
* ds/test-multi-pack-index:
packfile: close multi-pack-index in close_all_packs
multi-pack-index: define GIT_TEST_MULTI_PACK_INDEX
midx: close multi-pack-index on repack
midx: fix broken free() in close_midx()
Diffstat (limited to 'midx.c')
-rw-r--r-- | midx.c | 26 |
1 files changed, 20 insertions, 6 deletions
@@ -176,9 +176,13 @@ cleanup_fail: return NULL; } -static void close_midx(struct multi_pack_index *m) +void close_midx(struct multi_pack_index *m) { uint32_t i; + + if (!m) + return; + munmap((unsigned char *)m->data, m->data_len); close(m->fd); m->fd = -1; @@ -186,7 +190,7 @@ static void close_midx(struct multi_pack_index *m) for (i = 0; i < m->num_packs; i++) { if (m->packs[i]) { close_pack(m->packs[i]); - free(m->packs); + free(m->packs[i]); } } FREE_AND_NULL(m->packs); @@ -331,9 +335,14 @@ int prepare_multi_pack_index_one(struct repository *r, const char *object_dir, i struct multi_pack_index *m; struct multi_pack_index *m_search; int config_value; + static int env_value = -1; - if (repo_config_get_bool(r, "core.multipackindex", &config_value) || - !config_value) + if (env_value < 0) + env_value = git_env_bool(GIT_TEST_MULTI_PACK_INDEX, 0); + + if (!env_value && + (repo_config_get_bool(r, "core.multipackindex", &config_value) || + !config_value)) return 0; for (m_search = r->objects->multi_pack_index; m_search; m_search = m_search->next) @@ -914,9 +923,14 @@ cleanup: return 0; } -void clear_midx_file(const char *object_dir) +void clear_midx_file(struct repository *r) { - char *midx = get_midx_filename(object_dir); + char *midx = get_midx_filename(r->objects->objectdir); + + if (r->objects && r->objects->multi_pack_index) { + close_midx(r->objects->multi_pack_index); + r->objects->multi_pack_index = NULL; + } if (remove_path(midx)) { UNLEAK(midx); |