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()
This commit is contained in:
26
midx.c
26
midx.c
@ -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);
|
||||
|
Reference in New Issue
Block a user