static int verify_one_commit_graph(struct repository *r,
struct commit_graph *g,
- struct progress *progress)
+ struct progress *progress,
+ uint64_t *seen)
{
uint32_t i, cur_fanout_pos = 0;
struct object_id prev_oid, cur_oid;
timestamp_t max_generation = 0;
timestamp_t generation;
- display_progress(progress, i + 1);
+ display_progress(progress, ++(*seen));
oidread(&cur_oid, g->chunk_oid_lookup + g->hash_len * i);
graph_commit = lookup_commit(r, &cur_oid);
int verify_commit_graph(struct repository *r, struct commit_graph *g, int flags)
{
+ struct progress *progress = NULL;
int local_error = 0;
+ uint64_t seen = 0;
if (!g) {
graph_report("no commit-graph file loaded");
return 1;
}
- for (; g; g = g->base_graph) {
- struct progress *progress = NULL;
- if (flags & COMMIT_GRAPH_WRITE_PROGRESS)
- progress = start_progress(_("Verifying commits in commit graph"),
- g->num_commits);
+ if (flags & COMMIT_GRAPH_WRITE_PROGRESS) {
+ uint64_t total = g->num_commits;
+ if (!(flags & COMMIT_GRAPH_VERIFY_SHALLOW))
+ total += g->num_commits_in_base;
+
+ progress = start_progress(_("Verifying commits in commit graph"),
+ total);
+ }
- local_error |= verify_one_commit_graph(r, g, progress);
+ for (; g; g = g->base_graph) {
+ local_error |= verify_one_commit_graph(r, g, progress, &seen);
if (flags & COMMIT_GRAPH_VERIFY_SHALLOW)
break;
-
- stop_progress(&progress);
}
+ stop_progress(&progress);
+
return local_error;
}
git branch merge/octopus &&
git commit-graph write --reachable --split &&
git commit-graph verify --progress 2>err &&
- test_line_count = 3 err &&
+ test_line_count = 1 err &&
+ grep "Verifying commits in commit graph: 100% (18/18)" err &&
test_i18ngrep ! warning err &&
test_line_count = 3 $graphdir/commit-graph-chain
'