commit-graph: verify required chunks are present
The commit-graph file requires the following three chunks: * OID Fanout * OID Lookup * Commit Data If any of these are missing, then the 'verify' subcommand should report a failure. This includes the chunk IDs malformed or the chunk count is truncated. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
d9b9f8a6fd
commit
2bd0365f37
@ -848,5 +848,14 @@ int verify_commit_graph(struct repository *r, struct commit_graph *g)
|
||||
return 1;
|
||||
}
|
||||
|
||||
verify_commit_graph_error = 0;
|
||||
|
||||
if (!g->chunk_oid_fanout)
|
||||
graph_report("commit-graph is missing the OID Fanout chunk");
|
||||
if (!g->chunk_oid_lookup)
|
||||
graph_report("commit-graph is missing the OID Lookup chunk");
|
||||
if (!g->chunk_commit_data)
|
||||
graph_report("commit-graph is missing the Commit Data chunk");
|
||||
|
||||
return verify_commit_graph_error;
|
||||
}
|
||||
|
@ -249,6 +249,15 @@ test_expect_success 'git commit-graph verify' '
|
||||
|
||||
GRAPH_BYTE_VERSION=4
|
||||
GRAPH_BYTE_HASH=5
|
||||
GRAPH_BYTE_CHUNK_COUNT=6
|
||||
GRAPH_CHUNK_LOOKUP_OFFSET=8
|
||||
GRAPH_CHUNK_LOOKUP_WIDTH=12
|
||||
GRAPH_CHUNK_LOOKUP_ROWS=5
|
||||
GRAPH_BYTE_OID_FANOUT_ID=$GRAPH_CHUNK_LOOKUP_OFFSET
|
||||
GRAPH_BYTE_OID_LOOKUP_ID=$(($GRAPH_CHUNK_LOOKUP_OFFSET + \
|
||||
1 * $GRAPH_CHUNK_LOOKUP_WIDTH))
|
||||
GRAPH_BYTE_COMMIT_DATA_ID=$(($GRAPH_CHUNK_LOOKUP_OFFSET + \
|
||||
2 * $GRAPH_CHUNK_LOOKUP_WIDTH))
|
||||
|
||||
# usage: corrupt_graph_and_verify <position> <data> <string>
|
||||
# Manipulates the commit-graph file at the position
|
||||
@ -283,4 +292,24 @@ test_expect_success 'detect bad hash version' '
|
||||
"hash version"
|
||||
'
|
||||
|
||||
test_expect_success 'detect low chunk count' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_CHUNK_COUNT "\02" \
|
||||
"missing the .* chunk"
|
||||
'
|
||||
|
||||
test_expect_success 'detect missing OID fanout chunk' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_OID_FANOUT_ID "\0" \
|
||||
"missing the OID Fanout chunk"
|
||||
'
|
||||
|
||||
test_expect_success 'detect missing OID lookup chunk' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_OID_LOOKUP_ID "\0" \
|
||||
"missing the OID Lookup chunk"
|
||||
'
|
||||
|
||||
test_expect_success 'detect missing commit data chunk' '
|
||||
corrupt_graph_and_verify $GRAPH_BYTE_COMMIT_DATA_ID "\0" \
|
||||
"missing the Commit Data chunk"
|
||||
'
|
||||
|
||||
test_done
|
||||
|
Loading…
Reference in New Issue
Block a user