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