midx: read pack names into array
Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>maint
parent
32f3c541e3
commit
3227565cfd
17
midx.c
17
midx.c
|
@ -37,6 +37,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir)
|
||||||
uint32_t hash_version;
|
uint32_t hash_version;
|
||||||
char *midx_name = get_midx_filename(object_dir);
|
char *midx_name = get_midx_filename(object_dir);
|
||||||
uint32_t i;
|
uint32_t i;
|
||||||
|
const char *cur_pack_name;
|
||||||
|
|
||||||
fd = git_open(midx_name);
|
fd = git_open(midx_name);
|
||||||
|
|
||||||
|
@ -115,6 +116,22 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir)
|
||||||
if (!m->chunk_pack_names)
|
if (!m->chunk_pack_names)
|
||||||
die(_("multi-pack-index missing required pack-name chunk"));
|
die(_("multi-pack-index missing required pack-name chunk"));
|
||||||
|
|
||||||
|
m->pack_names = xcalloc(m->num_packs, sizeof(*m->pack_names));
|
||||||
|
|
||||||
|
cur_pack_name = (const char *)m->chunk_pack_names;
|
||||||
|
for (i = 0; i < m->num_packs; i++) {
|
||||||
|
m->pack_names[i] = cur_pack_name;
|
||||||
|
|
||||||
|
cur_pack_name += strlen(cur_pack_name) + 1;
|
||||||
|
|
||||||
|
if (i && strcmp(m->pack_names[i], m->pack_names[i - 1]) <= 0) {
|
||||||
|
error(_("multi-pack-index pack names out of order: '%s' before '%s'"),
|
||||||
|
m->pack_names[i - 1],
|
||||||
|
m->pack_names[i]);
|
||||||
|
goto cleanup_fail;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return m;
|
return m;
|
||||||
|
|
||||||
cleanup_fail:
|
cleanup_fail:
|
||||||
|
|
1
midx.h
1
midx.h
|
@ -16,6 +16,7 @@ struct multi_pack_index {
|
||||||
|
|
||||||
const unsigned char *chunk_pack_names;
|
const unsigned char *chunk_pack_names;
|
||||||
|
|
||||||
|
const char **pack_names;
|
||||||
char object_dir[FLEX_ARRAY];
|
char object_dir[FLEX_ARRAY];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
static int read_midx_file(const char *object_dir)
|
static int read_midx_file(const char *object_dir)
|
||||||
{
|
{
|
||||||
|
uint32_t i;
|
||||||
struct multi_pack_index *m = load_multi_pack_index(object_dir);
|
struct multi_pack_index *m = load_multi_pack_index(object_dir);
|
||||||
|
|
||||||
if (!m)
|
if (!m)
|
||||||
|
@ -24,6 +25,10 @@ static int read_midx_file(const char *object_dir)
|
||||||
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
|
printf("packs:\n");
|
||||||
|
for (i = 0; i < m->num_packs; i++)
|
||||||
|
printf("%s\n", m->pack_names[i]);
|
||||||
|
|
||||||
printf("object-dir: %s\n", m->object_dir);
|
printf("object-dir: %s\n", m->object_dir);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -5,11 +5,18 @@ test_description='multi-pack-indexes'
|
||||||
|
|
||||||
midx_read_expect () {
|
midx_read_expect () {
|
||||||
NUM_PACKS=$1
|
NUM_PACKS=$1
|
||||||
cat >expect <<-EOF
|
{
|
||||||
header: 4d494458 1 1 $NUM_PACKS
|
cat <<-EOF &&
|
||||||
chunks: pack-names
|
header: 4d494458 1 1 $NUM_PACKS
|
||||||
object-dir: .
|
chunks: pack-names
|
||||||
EOF
|
packs:
|
||||||
|
EOF
|
||||||
|
if test $NUM_PACKS -ge 1
|
||||||
|
then
|
||||||
|
ls pack/ | grep idx | sort
|
||||||
|
fi &&
|
||||||
|
printf "object-dir: .\n"
|
||||||
|
} >expect &&
|
||||||
test-tool read-midx . >actual &&
|
test-tool read-midx . >actual &&
|
||||||
test_cmp expect actual
|
test_cmp expect actual
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue