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>
This commit is contained in:
parent
4e6d207c45
commit
85cb8906f0
12
progress.c
12
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;
|
||||
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);
|
||||
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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user