summaryrefslogtreecommitdiff
path: root/progress.c
diff options
context:
space:
mode:
authorLuke Mewburn <luke@mewburn.net>2015-04-13 23:30:51 +1000
committerJunio C Hamano <gitster@pobox.com>2015-04-15 11:50:24 -0700
commit85cb8906f0e9b5639230fe247d5d916db8806777 (patch)
tree35d2ceb34d4d466cce0e8ac149fd3223bb50ec13 /progress.c
parent4e6d207c45e6f5c13b38c4a200f0d3339f88ad34 (diff)
downloadgit-85cb8906f0e9b5639230fe247d5d916db8806777.tar.gz
progress: no progress in background
Disable the display of the progress if stderr is not the current foreground process. Still display the final result when done. Signed-off-by: Luke Mewburn <luke@mewburn.net> Acked-by: Nicolas Pitre <nico@fluxnic.net> Signed-off-by: Junio C Hamano <gitster@pobox.com>
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 412e6b1ecc..43d9228378 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;
}