fsck: verify commit-graph
If core.commitGraph is true, verify the contents of the commit-graph during 'git fsck' using the 'git commit-graph verify' subcommand. Run this check on all alternates, as well. We use a new process for two reasons: 1. The subcommand decouples the details of loading and verifying a commit-graph file from the other fsck details. 2. The commit-graph verification requires the commits to be loaded in a specific order to guarantee we parse from the commit-graph file for some objects and from the object database for others. Signed-off-by: Derrick Stolee <dstolee@microsoft.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:

committed by
Junio C Hamano

parent
41df0e307f
commit
e0fd51e1d7
@ -18,6 +18,7 @@
|
||||
#include "decorate.h"
|
||||
#include "packfile.h"
|
||||
#include "object-store.h"
|
||||
#include "run-command.h"
|
||||
|
||||
#define REACHABLE 0x0001
|
||||
#define SEEN 0x0002
|
||||
@ -47,6 +48,7 @@ static int name_objects;
|
||||
#define ERROR_REACHABLE 02
|
||||
#define ERROR_PACK 04
|
||||
#define ERROR_REFS 010
|
||||
#define ERROR_COMMIT_GRAPH 020
|
||||
|
||||
static const char *describe_object(struct object *obj)
|
||||
{
|
||||
@ -822,5 +824,24 @@ int cmd_fsck(int argc, const char **argv, const char *prefix)
|
||||
}
|
||||
|
||||
check_connectivity();
|
||||
|
||||
if (core_commit_graph) {
|
||||
struct child_process commit_graph_verify = CHILD_PROCESS_INIT;
|
||||
const char *verify_argv[] = { "commit-graph", "verify", NULL, NULL, NULL };
|
||||
|
||||
commit_graph_verify.argv = verify_argv;
|
||||
commit_graph_verify.git_cmd = 1;
|
||||
if (run_command(&commit_graph_verify))
|
||||
errors_found |= ERROR_COMMIT_GRAPH;
|
||||
|
||||
prepare_alt_odb(the_repository);
|
||||
for (alt = the_repository->objects->alt_odb_list; alt; alt = alt->next) {
|
||||
verify_argv[2] = "--object-dir";
|
||||
verify_argv[3] = alt->path;
|
||||
if (run_command(&commit_graph_verify))
|
||||
errors_found |= ERROR_COMMIT_GRAPH;
|
||||
}
|
||||
}
|
||||
|
||||
return errors_found;
|
||||
}
|
||||
|
Reference in New Issue
Block a user