1529
struct hashfile *f;
1530
struct lock_file lk = LOCK_INIT;
1531
uint32_t chunk_ids[MAX_NUM_CHUNKS + 1];
1532
- uint64_t chunk_offsets[MAX_NUM_CHUNKS + 1];
1532
+ uint64_t chunk_sizes[MAX_NUM_CHUNKS + 1];
1533
const unsigned hashsz = the_hash_algo->rawsz;
1534
struct strbuf progress_title = STRBUF_INIT;
1535
int num_chunks = 3;
1536
+ uint64_t chunk_offset;
1537
struct object_id file_hash;
1538
const struct bloom_filter_settings bloom_settings = DEFAULT_BLOOM_FILTER_SETTINGS;
1539
1574
}
1575
1576
chunk_ids[0] = GRAPH_CHUNKID_OIDFANOUT;
1577
+ chunk_sizes[0] = GRAPH_FANOUT_SIZE;
1578
chunk_ids[1] = GRAPH_CHUNKID_OIDLOOKUP;
1579
+ chunk_sizes[1] = hashsz * ctx->commits.nr;
1580
chunk_ids[2] = GRAPH_CHUNKID_DATA;
1581
+ chunk_sizes[2] = (hashsz + 16) * ctx->commits.nr;
1582
+
1583
if (ctx->num_extra_edges) {
1584
chunk_ids[num_chunks] = GRAPH_CHUNKID_EXTRAEDGES;
1585
+ chunk_sizes[num_chunks] = 4 * ctx->num_extra_edges;
1586
num_chunks++;
1587
}
1588
if (ctx->changed_paths) {
1589
chunk_ids[num_chunks] = GRAPH_CHUNKID_BLOOMINDEXES;
1590
+ chunk_sizes[num_chunks] = sizeof(uint32_t) * ctx->commits.nr;
1591
num_chunks++;
1592
chunk_ids[num_chunks] = GRAPH_CHUNKID_BLOOMDATA;
1593
+ chunk_sizes[num_chunks] = sizeof(uint32_t) * 3
1594
+ + ctx->total_bloom_filter_data_size;
1595
num_chunks++;
1596
}
1597
if (ctx->num_commit_graphs_after > 1) {
1598
chunk_ids[num_chunks] = GRAPH_CHUNKID_BASE;
1599
+ chunk_sizes[num_chunks] = hashsz * (ctx->num_commit_graphs_after - 1);
1600
num_chunks++;
1601
}
1602
1603
chunk_ids[num_chunks] = 0;
1594
-
1595
- chunk_offsets[0] = 8 + (num_chunks + 1) * GRAPH_CHUNKLOOKUP_WIDTH;
1596
- chunk_offsets[1] = chunk_offsets[0] + GRAPH_FANOUT_SIZE;
1597
- chunk_offsets[2] = chunk_offsets[1] + hashsz * ctx->commits.nr;
1598
- chunk_offsets[3] = chunk_offsets[2] + (hashsz + 16) * ctx->commits.nr;
1599
-
1600
- num_chunks = 3;
1601
- if (ctx->num_extra_edges) {
1602
- chunk_offsets[num_chunks + 1] = chunk_offsets[num_chunks] +
1603
- 4 * ctx->num_extra_edges;
1604
- num_chunks++;
1605
- }
1606
- if (ctx->changed_paths) {
1607
- chunk_offsets[num_chunks + 1] = chunk_offsets[num_chunks] +
1608
- sizeof(uint32_t) * ctx->commits.nr;
1609
- num_chunks++;
1610
-
1611
- chunk_offsets[num_chunks + 1] = chunk_offsets[num_chunks] +
1612
- sizeof(uint32_t) * 3 + ctx->total_bloom_filter_data_size;
1613
- num_chunks++;
1614
- }
1615
- if (ctx->num_commit_graphs_after > 1) {
1616
- chunk_offsets[num_chunks + 1] = chunk_offsets[num_chunks] +
1617
- hashsz * (ctx->num_commit_graphs_after - 1);
1618
- num_chunks++;
1619
- }
1604
+ chunk_sizes[num_chunks] = 0;
1605
1606
hashwrite_be32(f, GRAPH_SIGNATURE);
1607
1610
hashwrite_u8(f, num_chunks);
1611
hashwrite_u8(f, ctx->num_commit_graphs_after - 1);
1612
1613
+ chunk_offset = 8 + (num_chunks + 1) * GRAPH_CHUNKLOOKUP_WIDTH;
1614
for (i = 0; i <= num_chunks; i++) {
1615
uint32_t chunk_write[3];
1616
1617
chunk_write[0] = htonl(chunk_ids[i]);
1632
- chunk_write[1] = htonl(chunk_offsets[i] >> 32);
1633
- chunk_write[2] = htonl(chunk_offsets[i] & 0xffffffff);
1618
+ chunk_write[1] = htonl(chunk_offset >> 32);
1619
+ chunk_write[2] = htonl(chunk_offset & 0xffffffff);
1620
hashwrite(f, chunk_write, 12);
1621
+
1622
+ chunk_offset += chunk_sizes[i];
1623
}
1624
1625
if (ctx->report_progress) {