b1b82d1c30
Subsequent tests will want to check for the existence of a multi-pack bitmap which matches the multi-pack-index stored in the pack directory. The multi-pack bitmap includes the hex checksum of the MIDX it corresponds to in its filename (for example, '$packdir/multi-pack-index-<checksum>.bitmap'). As a result, some tests want a way to learn what '<checksum>' is. This helper addresses that need by printing the checksum of the repository's multi-pack-index. Signed-off-by: Taylor Blau <me@ttaylorr.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
86 lines
1.8 KiB
C
86 lines
1.8 KiB
C
#include "test-tool.h"
|
|
#include "cache.h"
|
|
#include "midx.h"
|
|
#include "repository.h"
|
|
#include "object-store.h"
|
|
|
|
static int read_midx_file(const char *object_dir, int show_objects)
|
|
{
|
|
uint32_t i;
|
|
struct multi_pack_index *m;
|
|
|
|
setup_git_directory();
|
|
m = load_multi_pack_index(object_dir, 1);
|
|
|
|
if (!m)
|
|
return 1;
|
|
|
|
printf("header: %08x %d %d %d %d\n",
|
|
m->signature,
|
|
m->version,
|
|
m->hash_len,
|
|
m->num_chunks,
|
|
m->num_packs);
|
|
|
|
printf("chunks:");
|
|
|
|
if (m->chunk_pack_names)
|
|
printf(" pack-names");
|
|
if (m->chunk_oid_fanout)
|
|
printf(" oid-fanout");
|
|
if (m->chunk_oid_lookup)
|
|
printf(" oid-lookup");
|
|
if (m->chunk_object_offsets)
|
|
printf(" object-offsets");
|
|
if (m->chunk_large_offsets)
|
|
printf(" large-offsets");
|
|
|
|
printf("\nnum_objects: %d\n", m->num_objects);
|
|
|
|
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);
|
|
|
|
if (show_objects) {
|
|
struct object_id oid;
|
|
struct pack_entry e;
|
|
|
|
for (i = 0; i < m->num_objects; i++) {
|
|
nth_midxed_object_oid(&oid, m, i);
|
|
fill_midx_entry(the_repository, &oid, &e, m);
|
|
|
|
printf("%s %"PRIu64"\t%s\n",
|
|
oid_to_hex(&oid), e.offset, e.p->pack_name);
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static int read_midx_checksum(const char *object_dir)
|
|
{
|
|
struct multi_pack_index *m;
|
|
|
|
setup_git_directory();
|
|
m = load_multi_pack_index(object_dir, 1);
|
|
if (!m)
|
|
return 1;
|
|
printf("%s\n", hash_to_hex(get_midx_checksum(m)));
|
|
return 0;
|
|
}
|
|
|
|
int cmd__read_midx(int argc, const char **argv)
|
|
{
|
|
if (!(argc == 2 || argc == 3))
|
|
usage("read-midx [--show-objects|--checksum] <object-dir>");
|
|
|
|
if (!strcmp(argv[1], "--show-objects"))
|
|
return read_midx_file(argv[2], 1);
|
|
else if (!strcmp(argv[1], "--checksum"))
|
|
return read_midx_checksum(argv[2]);
|
|
return read_midx_file(argv[1], 0);
|
|
}
|