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
This commit is contained in:
Junio C Hamano 2015-05-11 14:23:42 -07:00
commit 66ff763ebb
2 changed files with 22 additions and 8 deletions

View file

@ -98,8 +98,6 @@ static inline unsigned int alarm(unsigned int seconds)
{ return 0; }
static inline int fsync(int fd)
{ return _commit(fd); }
static inline pid_t getppid(void)
{ return 1; }
static inline void sync(void)
{}
static inline uid_t getuid(void)
@ -121,6 +119,12 @@ static inline int sigaddset(sigset_t *set, int signum)
#define SIG_UNBLOCK 0
static inline int sigprocmask(int how, const sigset_t *set, sigset_t *oldset)
{ return 0; }
static inline pid_t getppid(void)
{ return 1; }
static inline pid_t getpgid(pid_t pid)
{ return pid == 0 ? getpid() : pid; }
static inline pid_t tcgetpgrp(int fd)
{ return getpid(); }
/*
* simple adaptors

View file

@ -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;
}