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

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

From
Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Date
Jun 7, 2021, 14:43 UTC
Message-ID
<patch-2.2-042f598826-20210607T144206Z-avarab@gmail.com>
In-Reply-To
<cover-0.2-0000000000-20210607T144206Z-avarab@gmail.com>

Fix a potential incorrect display of the number of items (off by one) and stalling of the progress bar in refresh_index().

The off-by-one error is minor, we should say we're processing the 1st item, not the 0th. This along with the next change also allows us to remove the last display_progress() call outside the loop, as we'll always have reached 100% now.

Let's also move the display_progress() call to the very start of the loop refresh_index() loop. In the loop we first check whether e.g. we ignore submodules and the entry we're processing is a submodule, whether we ignore certain paths etc.. Thus we could have a pathological case where we have a huge index consisting of such ignored entries, and we'd stall on the progress bar.

See ae9af12287 (status: show progress bar if refreshing the index takes too long, 2018-09-15) for the initial addition of this progress bar to refresh_index().

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
---
 read-cache.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/read-cache.c b/read-cache.c
index 470f800855..8b0073a839 100644
--- a/read-cache.c
+++ b/read-cache.c
@@ -1594,6 +1594,8 @@ int refresh_index(struct index_state *istate, unsigned int flags,
 		int t2_did_lstat = 0;
 		int t2_did_scan = 0;
 
+		display_progress(progress, i + 1);
+
 		ce = istate->cache[i];
 		if (ignore_submodules && S_ISGITLINK(ce->ce_mode))
 			continue;
@@ -1627,7 +1629,6 @@ int refresh_index(struct index_state *istate, unsigned int flags,
 		t2_sum_scan += t2_did_scan;
 		if (new_entry == ce)
 			continue;
-		display_progress(progress, i);
 		if (!new_entry) {
 			const char *fmt;
 
@@ -1662,7 +1663,6 @@ int refresh_index(struct index_state *istate, unsigned int flags,
 	trace2_data_intmax("index", NULL, "refresh/sum_lstat", t2_sum_lstat);
 	trace2_data_intmax("index", NULL, "refresh/sum_scan", t2_sum_scan);
 	trace2_region_leave("index", "refresh", NULL);
-	display_progress(progress, istate->cache_nr);
 	stop_progress(&progress);
 	trace_performance_leave("refresh index");
 	return has_errors;
-- 
2.32.0.rc3.434.gd8aed1f08a7
Previous: Ævar Arnfjörð BjarmasonNext: Derrick Stolee
Message 2 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.