Browse Source

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>
maint
Luke Mewburn 10 years ago committed by Junio C Hamano
parent
commit
85cb8906f0
  1. 12
      progress.c

12
progress.c

@ -72,6 +72,11 @@ static void clear_progress_signal(void) @@ -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) @@ -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…
Cancel
Save