From: Lars Schneider <larsxschneider@xxxxxxxxx> In 180a9f2 we implemented a progress API which suppresses the progress output if the progress has reached a specified percentage threshold within a given time frame. In 8aade10 we simplified the API and set the threshold to 0% and the time frame to 2 seconds for all delayed progress operations. That means we would only see a progress output if we still have 0% progress after 2 seconds. Consequently, only operations that have a very slow start would show the progress output at all. Remove the threshold entirely and print the progress output for all operations that take longer than 2 seconds. Signed-off-by: Lars Schneider <larsxschneider@xxxxxxxxx> --- Hi, a few weeks ago I was puzzled why the progress output is not shown in certain situations [1]. I debugged the issue a bit today and came up with this patch as solution. It is entirely possible that I misunderstood the intentions of the progress API and therefore my patch is bogus. In this case, please treat this email as RFC. Thanks, Lars [1] https://public-inbox.org/git/DC84FB2E-A26E-4957-B5FA-BE6DDEC3411B@xxxxxxxxx/ Notes: Base Commit: 1a4e40aa5d (1a4e40aa5dc16564af879142ba9dfbbb88d1e5ff) Diff on Web: https://github.com/larsxschneider/git/commit/3e5fdc512a Checkout: git fetch https://github.com/larsxschneider/git progress-fix-v1 && git checkout 3e5fdc512a progress.c | 18 +++--------------- 1 file changed, 3 insertions(+), 15 deletions(-) diff --git a/progress.c b/progress.c index 289678d43d..7fa1b0f235 100644 --- a/progress.c +++ b/progress.c @@ -34,7 +34,6 @@ struct progress { unsigned total; unsigned last_percent; unsigned delay; - unsigned delayed_percent_threshold; struct throughput *throughput; uint64_t start_ns; }; @@ -86,16 +85,6 @@ static int display(struct progress *progress, unsigned n, const char *done) if (progress->delay) { if (!progress_update || --progress->delay) return 0; - if (progress->total) { - unsigned percent = n * 100 / progress->total; - if (percent > progress->delayed_percent_threshold) { - /* inhibit this progress report entirely */ - clear_progress_signal(); - progress->delay = -1; - progress->total = 0; - return 0; - } - } } progress->last_value = n; @@ -206,7 +195,7 @@ int display_progress(struct progress *progress, unsigned n) } static struct progress *start_progress_delay(const char *title, unsigned total, - unsigned percent_threshold, unsigned delay) + unsigned delay) { struct progress *progress = malloc(sizeof(*progress)); if (!progress) { @@ -219,7 +208,6 @@ static struct progress *start_progress_delay(const char *title, unsigned total, progress->total = total; progress->last_value = -1; progress->last_percent = -1; - progress->delayed_percent_threshold = percent_threshold; progress->delay = delay; progress->throughput = NULL; progress->start_ns = getnanotime(); @@ -229,12 +217,12 @@ static struct progress *start_progress_delay(const char *title, unsigned total, struct progress *start_delayed_progress(const char *title, unsigned total) { - return start_progress_delay(title, total, 0, 2); + return start_progress_delay(title, total, 2); } struct progress *start_progress(const char *title, unsigned total) { - return start_progress_delay(title, total, 0, 0); + return start_progress_delay(title, total, 0); } void stop_progress(struct progress **p_progress) -- 2.15.1