Browse Source

midx: read pack names into array

Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
maint
Derrick Stolee 7 years ago committed by Junio C Hamano
parent
commit
3227565cfd
  1. 17
      midx.c
  2. 1
      midx.h
  3. 5
      t/helper/test-read-midx.c
  4. 17
      t/t5319-multi-pack-index.sh

17
midx.c

@ -37,6 +37,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir) @@ -37,6 +37,7 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir)
uint32_t hash_version;
char *midx_name = get_midx_filename(object_dir);
uint32_t i;
const char *cur_pack_name;

fd = git_open(midx_name);

@ -115,6 +116,22 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir) @@ -115,6 +116,22 @@ struct multi_pack_index *load_multi_pack_index(const char *object_dir)
if (!m->chunk_pack_names)
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;

cleanup_fail:

1
midx.h

@ -16,6 +16,7 @@ struct multi_pack_index { @@ -16,6 +16,7 @@ struct multi_pack_index {

const unsigned char *chunk_pack_names;

const char **pack_names;
char object_dir[FLEX_ARRAY];
};


5
t/helper/test-read-midx.c

@ -6,6 +6,7 @@ @@ -6,6 +6,7 @@

static int read_midx_file(const char *object_dir)
{
uint32_t i;
struct multi_pack_index *m = load_multi_pack_index(object_dir);

if (!m)
@ -24,6 +25,10 @@ static int read_midx_file(const char *object_dir) @@ -24,6 +25,10 @@ static int read_midx_file(const char *object_dir)

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);

return 0;

17
t/t5319-multi-pack-index.sh

@ -5,11 +5,18 @@ test_description='multi-pack-indexes' @@ -5,11 +5,18 @@ test_description='multi-pack-indexes'

midx_read_expect () {
NUM_PACKS=$1
cat >expect <<-EOF
header: 4d494458 1 1 $NUM_PACKS
chunks: pack-names
object-dir: .
EOF
{
cat <<-EOF &&
header: 4d494458 1 1 $NUM_PACKS
chunks: pack-names
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_cmp expect actual
}

Loading…
Cancel
Save