From 44a4693bfcec1876b29cdaec3625819d80ea1280 Mon Sep 17 00:00:00 2001 From: Derrick Stolee Date: Mon, 25 Nov 2019 21:28:22 +0000 Subject: [PATCH 1/2] progress: create GIT_PROGRESS_DELAY The start_delayed_progress() method is a preferred way to show optional progress to users as it ignores steps that take less than two seconds. However, this makes testing unreliable as tests expect to be very fast. In addition, users may want to decrease or increase this time interval depending on their preferences for terminal noise. Create the GIT_PROGRESS_DELAY environment variable to control the delay set during start_delayed_progress(). Set the value in some tests to guarantee their output remains consistent. Helped-by: Jeff King Signed-off-by: Derrick Stolee Signed-off-by: Junio C Hamano --- Documentation/git.txt | 4 ++++ progress.c | 15 +++++++++++++-- t/t5318-commit-graph.sh | 4 ++-- t/t6500-gc.sh | 3 +-- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/Documentation/git.txt b/Documentation/git.txt index 9b82564d1aa9c0..1c420da20892ef 100644 --- a/Documentation/git.txt +++ b/Documentation/git.txt @@ -544,6 +544,10 @@ other a pager. See also the `core.pager` option in linkgit:git-config[1]. +`GIT_PROGRESS_DELAY`:: + A number controlling how many seconds to delay before showing + optional progress indicators. Defaults to 2. + `GIT_EDITOR`:: This environment variable overrides `$EDITOR` and `$VISUAL`. It is used by several Git commands when, on interactive mode, diff --git a/progress.c b/progress.c index 0063559aab6e23..19805ac6461ba3 100644 --- a/progress.c +++ b/progress.c @@ -14,6 +14,7 @@ #include "strbuf.h" #include "trace.h" #include "utf8.h" +#include "config.h" #define TP_IDX_MAX 8 @@ -267,9 +268,19 @@ static struct progress *start_progress_delay(const char *title, uint64_t total, return progress; } +static int get_default_delay(void) +{ + static int delay_in_secs = -1; + + if (delay_in_secs < 0) + delay_in_secs = git_env_ulong("GIT_PROGRESS_DELAY", 2); + + return delay_in_secs; +} + struct progress *start_delayed_progress(const char *title, uint64_t total) { - return start_progress_delay(title, total, 2, 0); + return start_progress_delay(title, total, get_default_delay(), 0); } struct progress *start_progress(const char *title, uint64_t total) @@ -294,7 +305,7 @@ struct progress *start_sparse_progress(const char *title, uint64_t total) struct progress *start_delayed_sparse_progress(const char *title, uint64_t total) { - return start_progress_delay(title, total, 2, 1); + return start_progress_delay(title, total, get_default_delay(), 1); } static void finish_if_sparse(struct progress *progress) diff --git a/t/t5318-commit-graph.sh b/t/t5318-commit-graph.sh index d42b3efe391836..0824857e1f4abb 100755 --- a/t/t5318-commit-graph.sh +++ b/t/t5318-commit-graph.sh @@ -132,7 +132,7 @@ test_expect_success 'commit-graph write progress off for redirected stderr' ' test_expect_success 'commit-graph write force progress on for stderr' ' cd "$TRASH_DIRECTORY/full" && - git commit-graph write --progress 2>err && + GIT_PROGRESS_DELAY=0 git commit-graph write --progress 2>err && test_file_not_empty err ' @@ -150,7 +150,7 @@ test_expect_success 'commit-graph verify progress off for redirected stderr' ' test_expect_success 'commit-graph verify force progress on for stderr' ' cd "$TRASH_DIRECTORY/full" && - git commit-graph verify --progress 2>err && + GIT_PROGRESS_DELAY=0 git commit-graph verify --progress 2>err && test_file_not_empty err ' diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh index c0f04dc6b0e149..7f79eedd1c1391 100755 --- a/t/t6500-gc.sh +++ b/t/t6500-gc.sh @@ -103,9 +103,8 @@ test_expect_success 'auto gc with too many loose objects does not attempt to cre ' test_expect_success 'gc --no-quiet' ' - git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr && + GIT_PROGRESS_DELAY=0 git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr && test_must_be_empty stdout && - test_line_count = 1 stderr && test_i18ngrep "Computing commit graph generation numbers" stderr ' From ecc0869080701b5e252f74ed7b3d0156a5ec6112 Mon Sep 17 00:00:00 2001 From: Derrick Stolee Date: Mon, 25 Nov 2019 21:28:23 +0000 Subject: [PATCH 2/2] commit-graph: use start_delayed_progress() When writing a commit-graph, we show progress along several commit walks. When we use start_delayed_progress(), the progress line will only appear if that step takes a decent amount of time. However, one place was missed: computing generation numbers. This is normally a very fast operation as all commits have been parsed in a previous step. But, this is showing up for all users no matter how few commits are being added. The tests that check for the progress output have already been updated to use GIT_PROGRESS_DELAY=0 to force the expected output. Helped-by: Jeff King Reported-by: ryenus Signed-off-by: Derrick Stolee Signed-off-by: Junio C Hamano --- commit-graph.c | 2 +- t/t6500-gc.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/commit-graph.c b/commit-graph.c index 0aea7b2ae52638..071e1c6e9b768d 100644 --- a/commit-graph.c +++ b/commit-graph.c @@ -1103,7 +1103,7 @@ static void compute_generation_numbers(struct write_commit_graph_context *ctx) struct commit_list *list = NULL; if (ctx->report_progress) - ctx->progress = start_progress( + ctx->progress = start_delayed_progress( _("Computing commit graph generation numbers"), ctx->commits.nr); for (i = 0; i < ctx->commits.nr; i++) { diff --git a/t/t6500-gc.sh b/t/t6500-gc.sh index 7f79eedd1c1391..0a69a6711768c8 100755 --- a/t/t6500-gc.sh +++ b/t/t6500-gc.sh @@ -109,7 +109,8 @@ test_expect_success 'gc --no-quiet' ' ' test_expect_success TTY 'with TTY: gc --no-quiet' ' - test_terminal git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr && + test_terminal env GIT_PROGRESS_DELAY=0 \ + git -c gc.writeCommitGraph=true gc --no-quiet >stdout 2>stderr && test_must_be_empty stdout && test_i18ngrep "Enumerating objects" stderr && test_i18ngrep "Computing commit graph generation numbers" stderr