]> git.ipfire.org Git - thirdparty/git.git/blob - t/helper/test-read-midx.c
Merge branch 'js/t5563-portability-fix'
[thirdparty/git.git] / t / helper / test-read-midx.c
1 #include "test-tool.h"
2 #include "cache.h"
3 #include "hex.h"
4 #include "midx.h"
5 #include "repository.h"
6 #include "object-store.h"
7 #include "pack-bitmap.h"
8
9 static int read_midx_file(const char *object_dir, int show_objects)
10 {
11 uint32_t i;
12 struct multi_pack_index *m;
13
14 setup_git_directory();
15 m = load_multi_pack_index(object_dir, 1);
16
17 if (!m)
18 return 1;
19
20 printf("header: %08x %d %d %d %d\n",
21 m->signature,
22 m->version,
23 m->hash_len,
24 m->num_chunks,
25 m->num_packs);
26
27 printf("chunks:");
28
29 if (m->chunk_pack_names)
30 printf(" pack-names");
31 if (m->chunk_oid_fanout)
32 printf(" oid-fanout");
33 if (m->chunk_oid_lookup)
34 printf(" oid-lookup");
35 if (m->chunk_object_offsets)
36 printf(" object-offsets");
37 if (m->chunk_large_offsets)
38 printf(" large-offsets");
39
40 printf("\nnum_objects: %d\n", m->num_objects);
41
42 printf("packs:\n");
43 for (i = 0; i < m->num_packs; i++)
44 printf("%s\n", m->pack_names[i]);
45
46 printf("object-dir: %s\n", m->object_dir);
47
48 if (show_objects) {
49 struct object_id oid;
50 struct pack_entry e;
51
52 for (i = 0; i < m->num_objects; i++) {
53 nth_midxed_object_oid(&oid, m, i);
54 fill_midx_entry(the_repository, &oid, &e, m);
55
56 printf("%s %"PRIu64"\t%s\n",
57 oid_to_hex(&oid), e.offset, e.p->pack_name);
58 }
59 }
60
61 close_midx(m);
62
63 return 0;
64 }
65
66 static int read_midx_checksum(const char *object_dir)
67 {
68 struct multi_pack_index *m;
69
70 setup_git_directory();
71 m = load_multi_pack_index(object_dir, 1);
72 if (!m)
73 return 1;
74 printf("%s\n", hash_to_hex(get_midx_checksum(m)));
75 return 0;
76 }
77
78 static int read_midx_preferred_pack(const char *object_dir)
79 {
80 struct multi_pack_index *midx = NULL;
81 struct bitmap_index *bitmap = NULL;
82
83 setup_git_directory();
84
85 midx = load_multi_pack_index(object_dir, 1);
86 if (!midx)
87 return 1;
88
89 bitmap = prepare_bitmap_git(the_repository);
90 if (!bitmap)
91 return 1;
92 if (!bitmap_is_midx(bitmap)) {
93 free_bitmap_index(bitmap);
94 return 1;
95 }
96
97 printf("%s\n", midx->pack_names[midx_preferred_pack(bitmap)]);
98 free_bitmap_index(bitmap);
99 return 0;
100 }
101
102 int cmd__read_midx(int argc, const char **argv)
103 {
104 if (!(argc == 2 || argc == 3))
105 usage("read-midx [--show-objects|--checksum|--preferred-pack] <object-dir>");
106
107 if (!strcmp(argv[1], "--show-objects"))
108 return read_midx_file(argv[2], 1);
109 else if (!strcmp(argv[1], "--checksum"))
110 return read_midx_checksum(argv[2]);
111 else if (!strcmp(argv[1], "--preferred-pack"))
112 return read_midx_preferred_pack(argv[2]);
113 return read_midx_file(argv[1], 0);
114 }