Skip to content

Commit

Permalink
progress: create GIT_PROGRESS_DELAY
Browse files Browse the repository at this point in the history
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 <peff@peff.net>
Signed-off-by: Derrick Stolee <dstolee@microsoft.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
derrickstolee authored and gitster committed Nov 22, 2019
1 parent d9f6f3b commit 69dbc5d
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 6 deletions.
4 changes: 4 additions & 0 deletions Documentation/git.txt
Expand Up @@ -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,
Expand Down
15 changes: 13 additions & 2 deletions progress.c
Expand Up @@ -14,6 +14,7 @@
#include "strbuf.h"
#include "trace.h"
#include "utf8.h"
#include "config.h"

#define TP_IDX_MAX 8

Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions t/t5318-commit-graph.sh
Expand Up @@ -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
'

Expand All @@ -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
'

Expand Down
3 changes: 1 addition & 2 deletions t/t6500-gc.sh
Expand Up @@ -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
'

Expand Down

0 comments on commit 69dbc5d

Please sign in to comment.