diff options
author | Jeff King <peff@peff.net> | 2015-05-19 01:24:57 -0400 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2015-05-19 09:35:14 -0700 |
commit | a4fb76ce1916939c7e6359f9416f2af4a760f6f1 (patch) | |
tree | 9cff56e372052a64557d55b7a9a18986f2bf3280 /progress.c | |
parent | 9a9a41db83052b674b89c084e4ac8c1458f7b11e (diff) | |
download | git-a4fb76ce1916939c7e6359f9416f2af4a760f6f1.tar.gz |
progress: treat "no terminal" as being in the foregroundlm/squelch-bg-progress
progress: treat "no terminal" as being in the foreground
Commit 85cb890 (progress: no progress in background,
2015-04-13) avoids sending progress from background
processes by checking that the process group id of the
current process is the same as that of the controlling
terminal.
If we don't have a terminal, however, this check never
succeeds, and we print no progress at all (until the final
"done" message). This can be seen when cloning a large
repository; instead of getting progress updates for
"counting objects", it will appear to hang then print the
final count.
We can fix this by treating an error return from tcgetpgrp()
as a signal to show the progress.
Signed-off-by: Jeff King <peff@peff.net>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'progress.c')
-rw-r--r-- | progress.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/progress.c b/progress.c index 43d9228378..2e31bec60f 100644 --- a/progress.c +++ b/progress.c @@ -74,7 +74,8 @@ static void clear_progress_signal(void) static int is_foreground_fd(int fd) { - return getpgid(0) == tcgetpgrp(fd); + int tpgrp = tcgetpgrp(fd); + return tpgrp < 0 || tpgrp == getpgid(0); } static int display(struct progress *progress, unsigned n, const char *done) |