170
return read_bitmap(index->map, index->map_size, &index->map_pos);
171
}
172
173
+static uint32_t bitmap_num_objects_total(struct bitmap_index *index)
174
+{
175
+ if (index->midx) {
176
+ struct multi_pack_index *m = index->midx;
177
+ return m->num_objects + m->num_objects_in_base;
178
+ }
179
+ return index->pack->num_objects;
180
+}
181
+
182
static uint32_t bitmap_num_objects(struct bitmap_index *index)
183
{
184
if (index->midx)
933
934
if (pos < kh_end(positions)) {
935
int bitmap_pos = kh_value(positions, pos);
927
- return bitmap_pos + bitmap_num_objects(bitmap_git);
936
+ return bitmap_pos + bitmap_num_objects_total(bitmap_git);
937
}
938
939
return -1;
1001
bitmap_pos = kh_value(eindex->positions, hash_pos);
1002
}
1003
995
- return bitmap_pos + bitmap_num_objects(bitmap_git);
1004
+ return bitmap_pos + bitmap_num_objects_total(bitmap_git);
1005
}
1006
1007
struct bitmap_show_data {
1351
if (pos < 0 || pos >= bitmap_num_objects(bitmap_git))
1352
goto done;
1353
1354
+ /*
1355
+ * Use bitmap-relative positions instead of offsetting
1356
+ * by bitmap_git->num_objects_in_base because we use
1357
+ * this to find a match in pseudo_merge_for_parents(),
1358
+ * and pseudo-merge groups cannot span multiple bitmap
1359
+ * layers.
1360
+ */
1361
bitmap_set(parents, pos);
1362
}
1363
1348
- match = pseudo_merge_for_parents(&bitmap_git->pseudo_merges,
1349
- parents);
1364
+ match = pseudo_merge_for_parents(&bitmap_git->pseudo_merges, parents);
1365
1366
done:
1367
bitmap_free(parents);
1515
for (i = 0; i < eindex->count; ++i) {
1516
struct object *obj;
1517
1503
- if (!bitmap_get(objects, st_add(bitmap_num_objects(bitmap_git), i)))
1518
+ if (!bitmap_get(objects,
1519
+ st_add(bitmap_num_objects_total(bitmap_git),
1520
+ i)))
1521
continue;
1522
1523
obj = eindex->objects[i];
1696
* them individually.
1697
*/
1698
for (i = 0; i < eindex->count; i++) {
1682
- size_t pos = st_add(i, bitmap_num_objects(bitmap_git));
1699
+ size_t pos = st_add(i, bitmap_num_objects_total(bitmap_git));
1700
if (eindex->objects[i]->type == type &&
1701
bitmap_get(to_filter, pos) &&
1702
!bitmap_get(tips, pos))
1722
1723
oi.sizep = &size;
1724
1708
- if (pos < bitmap_num_objects(bitmap_git)) {
1725
+ if (pos < bitmap_num_objects_total(bitmap_git)) {
1726
struct packed_git *pack;
1727
off_t ofs;
1728
1745
die(_("unable to get size of %s"), oid_to_hex(&oid));
1746
}
1747
} else {
1748
+ size_t eindex_pos = pos - bitmap_num_objects_total(bitmap_git);
1749
struct eindex *eindex = &bitmap_git->ext_index;
1732
- struct object *obj = eindex->objects[pos - bitmap_num_objects(bitmap_git)];
1750
+ struct object *obj = eindex->objects[eindex_pos];
1751
if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid,
1752
&oi, 0) < 0)
1753
die(_("unable to get size of %s"), oid_to_hex(&obj->oid));
1900
uint32_t objects_nr;
1901
size_t i, pos;
1902
1885
- objects_nr = bitmap_num_objects(bitmap_git);
1903
+ objects_nr = bitmap_num_objects_total(bitmap_git);
1904
pos = objects_nr / BITS_IN_EWORD;
1905
1906
if (pos > result->word_alloc)
2437
for (i = 0; i < eindex->count; ++i) {
2438
if (eindex->objects[i]->type == type &&
2439
bitmap_get(objects,
2422
- st_add(bitmap_num_objects(bitmap_git), i)))
2440
+ st_add(bitmap_num_objects_total(bitmap_git), i)))
2441
count++;
2442
}
2443
2838
BUG("rebuild_existing_bitmaps: missing required rev-cache "
2839
"extension");
2840
2823
- num_objects = bitmap_num_objects(bitmap_git);
2841
+ num_objects = bitmap_num_objects_total(bitmap_git);
2842
CALLOC_ARRAY(reposition, num_objects);
2843
2844
for (i = 0; i < num_objects; ++i) {
2981
struct object *obj = eindex->objects[i];
2982
2983
if (!bitmap_get(result,
2966
- st_add(bitmap_num_objects(bitmap_git), i)))
2984
+ st_add(bitmap_num_objects_total(bitmap_git),
2985
+ i)))
2986
continue;
2987
2988
if (oid_object_info_extended(bitmap_repo(bitmap_git), &obj->oid,