diff options
author | Junio C Hamano <gitster@pobox.com> | 2015-05-11 14:23:42 -0700 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-05-11 14:23:42 -0700 |
commit | 66ff763ebb35e5fc379f73c2769656cd61fe6b33 (patch) | |
tree | 802fb6b714ddb3c441573632dcb0c0a3fbdee8d4 /progress.c | |
parent | cedeffeee06f7ae5982aa5e08fad78a90c4331bf (diff) | |
parent | 9a9a41db83052b674b89c084e4ac8c1458f7b11e (diff) | |
download | git-66ff763ebb35e5fc379f73c2769656cd61fe6b33.tar.gz git-66ff763ebb35e5fc379f73c2769656cd61fe6b33.tar.xz |
Merge branch 'lm/squelch-bg-progress'
Many long-running operations show progress eye-candy, even when
they are later backgrounded. Hide the eye-candy when the process
is sent to the background instead.
* lm/squelch-bg-progress:
compat/mingw: stubs for getpgid() and tcgetpgrp()
progress: no progress in background
Diffstat (limited to 'progress.c')
-rw-r--r-- | progress.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/progress.c b/progress.c index 412e6b1ec..43d922837 100644 --- a/progress.c +++ b/progress.c @@ -72,6 +72,11 @@ static void clear_progress_signal(void) progress_update = 0; } +static int is_foreground_fd(int fd) +{ + return getpgid(0) == tcgetpgrp(fd); +} + static int display(struct progress *progress, unsigned n, const char *done) { const char *eol, *tp; @@ -98,16 +103,21 @@ static int display(struct progress *progress, unsigned n, const char *done) unsigned percent = n * 100 / progress->total; if (percent != progress->last_percent || progress_update) { progress->last_percent = percent; - fprintf(stderr, "%s: %3u%% (%u/%u)%s%s", - progress->title, percent, n, - progress->total, tp, eol); - fflush(stderr); + if (is_foreground_fd(fileno(stderr)) || done) { + fprintf(stderr, "%s: %3u%% (%u/%u)%s%s", + progress->title, percent, n, + progress->total, tp, eol); + fflush(stderr); + } progress_update = 0; return 1; } } else if (progress_update) { - fprintf(stderr, "%s: %u%s%s", progress->title, n, tp, eol); - fflush(stderr); + if (is_foreground_fd(fileno(stderr)) || done) { + fprintf(stderr, "%s: %u%s%s", + progress->title, n, tp, eol); + fflush(stderr); + } progress_update = 0; return 1; } |