aboutsummaryrefslogtreecommitdiff
path: root/progress.c
diff options
context:
space:
mode:
authorJunio C Hamano <gitster@pobox.com>2015-05-11 14:23:42 -0700
committerJunio C Hamano <gitster@pobox.com>2015-05-11 14:23:42 -0700
commit66ff763ebb35e5fc379f73c2769656cd61fe6b33 (patch)
tree802fb6b714ddb3c441573632dcb0c0a3fbdee8d4 /progress.c
parentcedeffeee06f7ae5982aa5e08fad78a90c4331bf (diff)
parent9a9a41db83052b674b89c084e4ac8c1458f7b11e (diff)
downloadgit-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.c22
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;
}