Git fork

commit-graph: convert to using the_hash_algo

Instead of using hard-coded constants for object sizes, use
the_hash_algo to look them up. In addition, use a function call to look
up the object ID version and produce the correct value. For now, we use
version 1, which means to use the default algorithm used in the rest of
the repository.

Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>

authored by

brian m. carlson and committed by
Junio C Hamano
c1665998 37649b7f

+17 -16
+17 -16
commit-graph.c
··· 20 20 #define GRAPH_CHUNKID_DATA 0x43444154 /* "CDAT" */ 21 21 #define GRAPH_CHUNKID_LARGEEDGES 0x45444745 /* "EDGE" */ 22 22 23 - #define GRAPH_DATA_WIDTH 36 23 + #define GRAPH_DATA_WIDTH (the_hash_algo->rawsz + 16) 24 24 25 25 #define GRAPH_VERSION_1 0x1 26 26 #define GRAPH_VERSION GRAPH_VERSION_1 27 - 28 - #define GRAPH_OID_VERSION_SHA1 1 29 - #define GRAPH_OID_LEN_SHA1 GIT_SHA1_RAWSZ 30 - #define GRAPH_OID_VERSION GRAPH_OID_VERSION_SHA1 31 - #define GRAPH_OID_LEN GRAPH_OID_LEN_SHA1 32 27 33 28 #define GRAPH_OCTOPUS_EDGES_NEEDED 0x80000000 34 29 #define GRAPH_PARENT_MISSING 0x7fffffff ··· 41 36 #define GRAPH_FANOUT_SIZE (4 * 256) 42 37 #define GRAPH_CHUNKLOOKUP_WIDTH 12 43 38 #define GRAPH_MIN_SIZE (GRAPH_HEADER_SIZE + 4 * GRAPH_CHUNKLOOKUP_WIDTH \ 44 - + GRAPH_FANOUT_SIZE + GRAPH_OID_LEN) 39 + + GRAPH_FANOUT_SIZE + the_hash_algo->rawsz) 45 40 46 41 char *get_commit_graph_filename(const char *obj_dir) 47 42 { 48 43 return xstrfmt("%s/info/commit-graph", obj_dir); 44 + } 45 + 46 + static uint8_t oid_version(void) 47 + { 48 + return 1; 49 49 } 50 50 51 51 static struct commit_graph *alloc_commit_graph(void) ··· 100 100 } 101 101 102 102 hash_version = *(unsigned char*)(data + 5); 103 - if (hash_version != GRAPH_OID_VERSION) { 103 + if (hash_version != oid_version()) { 104 104 error(_("hash version %X does not match version %X"), 105 - hash_version, GRAPH_OID_VERSION); 105 + hash_version, oid_version()); 106 106 goto cleanup_fail; 107 107 } 108 108 109 109 graph = alloc_commit_graph(); 110 110 111 - graph->hash_len = GRAPH_OID_LEN; 111 + graph->hash_len = the_hash_algo->rawsz; 112 112 graph->num_chunks = *(unsigned char*)(data + 6); 113 113 graph->graph_fd = fd; 114 114 graph->data = graph_map; ··· 124 124 125 125 chunk_lookup += GRAPH_CHUNKLOOKUP_WIDTH; 126 126 127 - if (chunk_offset > graph_size - GIT_MAX_RAWSZ) { 127 + if (chunk_offset > graph_size - the_hash_algo->rawsz) { 128 128 error(_("improper chunk offset %08x%08x"), (uint32_t)(chunk_offset >> 32), 129 129 (uint32_t)chunk_offset); 130 130 goto cleanup_fail; ··· 711 711 int num_chunks; 712 712 int num_extra_edges; 713 713 struct commit_list *parent; 714 + const unsigned hashsz = the_hash_algo->rawsz; 714 715 715 716 oids.nr = 0; 716 717 oids.alloc = approximate_object_count() / 4; ··· 831 832 hashwrite_be32(f, GRAPH_SIGNATURE); 832 833 833 834 hashwrite_u8(f, GRAPH_VERSION); 834 - hashwrite_u8(f, GRAPH_OID_VERSION); 835 + hashwrite_u8(f, oid_version()); 835 836 hashwrite_u8(f, num_chunks); 836 837 hashwrite_u8(f, 0); /* unused padding byte */ 837 838 ··· 846 847 847 848 chunk_offsets[0] = 8 + (num_chunks + 1) * GRAPH_CHUNKLOOKUP_WIDTH; 848 849 chunk_offsets[1] = chunk_offsets[0] + GRAPH_FANOUT_SIZE; 849 - chunk_offsets[2] = chunk_offsets[1] + GRAPH_OID_LEN * commits.nr; 850 - chunk_offsets[3] = chunk_offsets[2] + (GRAPH_OID_LEN + 16) * commits.nr; 850 + chunk_offsets[2] = chunk_offsets[1] + hashsz * commits.nr; 851 + chunk_offsets[3] = chunk_offsets[2] + (hashsz + 16) * commits.nr; 851 852 chunk_offsets[4] = chunk_offsets[3] + 4 * num_extra_edges; 852 853 853 854 for (i = 0; i <= num_chunks; i++) { ··· 860 861 } 861 862 862 863 write_graph_chunk_fanout(f, commits.list, commits.nr); 863 - write_graph_chunk_oids(f, GRAPH_OID_LEN, commits.list, commits.nr); 864 - write_graph_chunk_data(f, GRAPH_OID_LEN, commits.list, commits.nr); 864 + write_graph_chunk_oids(f, hashsz, commits.list, commits.nr); 865 + write_graph_chunk_data(f, hashsz, commits.list, commits.nr); 865 866 write_graph_chunk_large_edges(f, commits.list, commits.nr); 866 867 867 868 close_commit_graph();