git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH 2/2] read-cache: fix incorrect count and progress bar stalling

From
René Scharfe <l.s.r@web.de>
Date
Jun 10, 2021, 15:14 UTC
Message-ID
<f7a54b2d-42c6-1308-f1b0-2f67b2dcadc7@web.de>
In-Reply-To
<xmqq4ke6ffqv.fsf@gitster.g>
Am 10.06.21 um 07:30 schrieb Junio C Hamano:
Show 12 quoted lines
> Ævar Arnfjörð Bjarmason <avarab@gmail.com> writes:
>
>> I was too quick with that "But yes, I agree with the issue in theory".
>>
>> Having thought about it some more I think you're wrong, it doesn't make
>> sense to use the API in the way you're suggesting.
>
> Sorry, I've read the message I am responding to a few times, but I
> couldn't tell what you are arguing against in the suggestion given
> earlier by René, which offered two possibile ways to consistently
> call display() with the number of things that we have DONE
> processing (not the number of things that we are about to touch) [*1*].
Same here.

Perhaps a demo helps. The patch at the bottom adds an echo command to the test helper. This way we can intersperse the progress lines with indications when items are processed.

So here's the pattern for calling display_progress at the top of the loop and again with the number of items after the loop:

  $ (
    for i in 0 1 2
    do
      echo progress $i
      echo update
      echo echo WORK
    done
    echo progress 3
  ) | ./t/helper/test-tool progress --total 3 test 2>&1 | tr '\r' '\n'
  test:   0% (0/3)
  WORK
  test:  33% (1/3)
  WORK
  test:  66% (2/3)
  WORK
  test: 100% (3/3)
  test: 100% (3/3), done.
The progress lines reflect the number of finished items at all times.
Here's the pattern for display_progress at the bottom of the loop:
  $ (
    for i in 0 1 2
    do
      echo echo WORK
      echo progress $(( $i + 1 ))
      echo update
    done
  ) | ./t/helper/test-tool progress --total 3 test 2>&1 | tr '\r' '\n'
  WORK
  test:  33% (1/3)
  WORK
  test:  66% (2/3)
  WORK
  test: 100% (3/3)
  test: 100% (3/3), done.
Same here, the progress line shows the correct number of finished items.
Here's the pattern suggested in your patch:
  $ (
    for i in 0 1 2
    do
      echo progress $(( $i + 1 ))
      echo update
      echo echo WORK
    done
  ) | ./t/helper/test-tool progress --total 3 test 2>&1 | tr '\r' '\n'
  test:  33% (1/3)
  WORK
  test:  66% (2/3)
  WORK
  test: 100% (3/3)
  WORK
  test: 100% (3/3), done.

It reports one item too many in the intermediate progress lines and is correct only at the very end.

René
diff --git a/t/helper/test-progress.c b/t/helper/test-progress.c
index 5d05cbe789..b6589f3878 100644
--- a/t/helper/test-progress.c
+++ b/t/helper/test-progress.c
@@ -65,6 +65,8 @@ int cmd__progress(int argc, const char **argv)
 			display_throughput(progress, byte_count);
 		} else if (!strcmp(line.buf, "update"))
 			progress_test_force_update();
+		else if (skip_prefix(line.buf, "echo ", (const char **) &end))
+			fprintf(stderr, "%s\n", end);
 		else
 			die("invalid input: '%s'\n", line.buf);
 	}
Previous: Junio C HamanoNext: René Scharfe
Message 12 of 24 in “trivial progress.c API usage fixes”
  1. 0/2 trivial progress.c API usage fixesÆvar Arnfjörð Bjarmason, Jun 7, 2021
  2. 2/2 read-cache: fix incorrect count and progress bar stallingÆvar Arnfjörð Bjarmason, Jun 7, 2021
  3. Derrick StoleeJun 7, 2021
  4. Ævar Arnfjörð BjarmasonJun 7, 2021
  5. René ScharfeJun 7, 2021
  6. Ævar Arnfjörð BjarmasonJun 7, 2021
  7. Junio C HamanoJun 7, 2021
  8. Ævar Arnfjörð BjarmasonJun 8, 2021
  9. René ScharfeJun 8, 2021
  10. Ævar Arnfjörð BjarmasonJun 8, 2021
  11. Junio C HamanoJun 10, 2021
  12. René ScharfeJun 10, 2021
  13. René ScharfeJun 10, 2021
  14. Ævar Arnfjörð BjarmasonJun 14, 2021
  15. René ScharfeJun 14, 2021
  16. Ævar Arnfjörð BjarmasonJun 14, 2021
  17. Junio C HamanoJun 15, 2021
  18. René ScharfeJun 15, 2021
  19. Ævar Arnfjörð BjarmasonJun 15, 2021
  20. René ScharfeJun 20, 2021
  21. 1/2 read-cache.c: don't guard calls to progress.c APIÆvar Arnfjörð Bjarmason, Jun 7, 2021
  22. Derrick StoleeJun 7, 2021
  23. Ævar Arnfjörð BjarmasonJun 7, 2021
  24. Derrick StoleeJun 7, 2021

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.