commit-graph: don't store file hashes as struct object_id
The idea behind struct object_id is that it is supposed to represent the identifier of a standard Git object or a special pseudo-object like the all-zeros object ID. In this case, we have file hashes, which, while similar, are distinct from the identifiers of objects. Switch these code paths to use an unsigned char array. This is both more logically consistent and it means that we need not set the algorithm identifier for the struct object_id. Signed-off-by: brian m. carlson <sandals@crustytoothpaste.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
dd15f4f457
commit
72871b132c
@ -1793,8 +1793,8 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
|
||||
struct lock_file lk = LOCK_INIT;
|
||||
const unsigned hashsz = the_hash_algo->rawsz;
|
||||
struct strbuf progress_title = STRBUF_INIT;
|
||||
struct object_id file_hash;
|
||||
struct chunkfile *cf;
|
||||
unsigned char file_hash[GIT_MAX_RAWSZ];
|
||||
|
||||
if (ctx->split) {
|
||||
struct strbuf tmp_file = STRBUF_INIT;
|
||||
@ -1909,7 +1909,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
|
||||
}
|
||||
|
||||
close_commit_graph(ctx->r->objects);
|
||||
finalize_hashfile(f, file_hash.hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
|
||||
finalize_hashfile(f, file_hash, CSUM_HASH_IN_STREAM | CSUM_FSYNC);
|
||||
free_chunkfile(cf);
|
||||
|
||||
if (ctx->split) {
|
||||
@ -1945,7 +1945,7 @@ static int write_commit_graph_file(struct write_commit_graph_context *ctx)
|
||||
unlink(graph_name);
|
||||
}
|
||||
|
||||
ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(oid_to_hex(&file_hash));
|
||||
ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1] = xstrdup(hash_to_hex(file_hash));
|
||||
final_graph_name = get_split_graph_filename(ctx->odb,
|
||||
ctx->commit_graph_hash_after[ctx->num_commit_graphs_after - 1]);
|
||||
ctx->commit_graph_filenames_after[ctx->num_commit_graphs_after - 1] = final_graph_name;
|
||||
@ -2425,7 +2425,8 @@ static void graph_report(const char *fmt, ...)
|
||||
int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
|
||||
{
|
||||
uint32_t i, cur_fanout_pos = 0;
|
||||
struct object_id prev_oid, cur_oid, checksum;
|
||||
struct object_id prev_oid, cur_oid;
|
||||
unsigned char checksum[GIT_MAX_HEXSZ];
|
||||
int generation_zero = 0;
|
||||
struct hashfile *f;
|
||||
int devnull;
|
||||
@ -2444,8 +2445,8 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
|
||||
devnull = open("/dev/null", O_WRONLY);
|
||||
f = hashfd(devnull, NULL);
|
||||
hashwrite(f, g->data, g->data_len - g->hash_len);
|
||||
finalize_hashfile(f, checksum.hash, CSUM_CLOSE);
|
||||
if (!hasheq(checksum.hash, g->data + g->data_len - g->hash_len)) {
|
||||
finalize_hashfile(f, checksum, CSUM_CLOSE);
|
||||
if (!hasheq(checksum, g->data + g->data_len - g->hash_len)) {
|
||||
graph_report(_("the commit-graph file has incorrect checksum and is likely corrupt"));
|
||||
verify_commit_graph_error = VERIFY_COMMIT_GRAPH_ERROR_HASH;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user