]> git.ipfire.org Git - thirdparty/git.git/commitdiff
commit-graph: fix bogus counter in "Scanning merged commits" progress line
authorSZEDER Gábor <szeder.dev@gmail.com>
Thu, 9 Sep 2021 01:10:11 +0000 (03:10 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 9 Sep 2021 16:58:19 +0000 (09:58 -0700)
The final value of the counter of the "Scanning merged commits"
progress line is always one less than its expected total, e.g.:

  Scanning merged commits:  83% (5/6), done.

This happens because while iterating over an array the loop variable
is passed to display_progress() as-is, but while C arrays (and thus
the loop variable) start at 0 and end at N-1, the progress counter
must end at N. Fix this by passing 'i + 1' to display_progress(), like
most other callsites do.

There's an RFC series to add a GIT_TEST_CHECK_PROGRESS=1 mode[1] which
catches this issue in the 'fetch.writeCommitGraph' and
'fetch.writeCommitGraph with submodules' tests in
't5510-fetch.sh'. The GIT_TEST_CHECK_PROGRESS=1 mode is not part of
this series, but future changes to progress.c may add it or similar
assertions to catch this and similar bugs elsewhere.

1. https://lore.kernel.org/git/20210620200303.2328957-1-szeder.dev@gmail.com/

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
commit-graph.c

index 3860a0d847737930ed39286646d89c4e252e8367..9d18c1d87d9fd26934e1cc6563825964858d4ef1 100644 (file)
@@ -2096,7 +2096,7 @@ static void sort_and_scan_merged_commits(struct write_commit_graph_context *ctx)
 
        ctx->num_extra_edges = 0;
        for (i = 0; i < ctx->commits.nr; i++) {
-               display_progress(ctx->progress, i);
+               display_progress(ctx->progress, i + 1);
 
                if (i && oideq(&ctx->commits.list[i - 1]->object.oid,
                          &ctx->commits.list[i]->object.oid)) {