1 #define USE_THE_REPOSITORY_VARIABLE
6 #include "repository.h"
7 #include "object-store-ll.h"
8 #include "pack-bitmap.h"
12 #include "pack-revindex.h"
14 static int read_midx_file(const char *object_dir
, const char *checksum
,
18 struct multi_pack_index
*m
;
20 setup_git_directory();
21 m
= load_multi_pack_index(object_dir
, 1);
27 while (m
&& strcmp(hash_to_hex(get_midx_checksum(m
)), checksum
))
33 printf("header: %08x %d %d %d %d\n",
42 if (m
->chunk_pack_names
)
43 printf(" pack-names");
44 if (m
->chunk_oid_fanout
)
45 printf(" oid-fanout");
46 if (m
->chunk_oid_lookup
)
47 printf(" oid-lookup");
48 if (m
->chunk_object_offsets
)
49 printf(" object-offsets");
50 if (m
->chunk_large_offsets
)
51 printf(" large-offsets");
53 printf("\nnum_objects: %d\n", m
->num_objects
);
56 for (i
= 0; i
< m
->num_packs
; i
++)
57 printf("%s\n", m
->pack_names
[i
]);
59 printf("object-dir: %s\n", m
->object_dir
);
65 for (i
= 0; i
< m
->num_objects
; i
++) {
66 nth_midxed_object_oid(&oid
, m
,
67 i
+ m
->num_objects_in_base
);
68 fill_midx_entry(the_repository
, &oid
, &e
, m
);
70 printf("%s %"PRIu64
"\t%s\n",
71 oid_to_hex(&oid
), e
.offset
, e
.p
->pack_name
);
80 static int read_midx_checksum(const char *object_dir
)
82 struct multi_pack_index
*m
;
84 setup_git_directory();
85 m
= load_multi_pack_index(object_dir
, 1);
88 printf("%s\n", hash_to_hex(get_midx_checksum(m
)));
94 static int read_midx_preferred_pack(const char *object_dir
)
96 struct multi_pack_index
*midx
= NULL
;
97 uint32_t preferred_pack
;
99 setup_git_directory();
101 midx
= load_multi_pack_index(object_dir
, 1);
105 if (midx_preferred_pack(midx
, &preferred_pack
) < 0) {
106 warning(_("could not determine MIDX preferred pack"));
111 printf("%s\n", midx
->pack_names
[preferred_pack
]);
116 static int read_midx_bitmapped_packs(const char *object_dir
)
118 struct multi_pack_index
*midx
= NULL
;
119 struct bitmapped_pack pack
;
122 setup_git_directory();
124 midx
= load_multi_pack_index(object_dir
, 1);
128 for (i
= 0; i
< midx
->num_packs
+ midx
->num_packs_in_base
; i
++) {
129 if (nth_bitmapped_pack(the_repository
, midx
, &pack
, i
) < 0) {
134 printf("%s\n", pack_basename(pack
.p
));
135 printf(" bitmap_pos: %"PRIuMAX
"\n", (uintmax_t)pack
.bitmap_pos
);
136 printf(" bitmap_nr: %"PRIuMAX
"\n", (uintmax_t)pack
.bitmap_nr
);
144 int cmd__read_midx(int argc
, const char **argv
)
146 if (!(argc
== 2 || argc
== 3 || argc
== 4))
147 usage("read-midx [--show-objects|--checksum|--preferred-pack|--bitmap] <object-dir> <checksum>");
149 if (!strcmp(argv
[1], "--show-objects"))
150 return read_midx_file(argv
[2], argv
[3], 1);
151 else if (!strcmp(argv
[1], "--checksum"))
152 return read_midx_checksum(argv
[2]);
153 else if (!strcmp(argv
[1], "--preferred-pack"))
154 return read_midx_preferred_pack(argv
[2]);
155 else if (!strcmp(argv
[1], "--bitmap"))
156 return read_midx_bitmapped_packs(argv
[2]);
157 return read_midx_file(argv
[1], argv
[2], 0);