Skip to content

Commit

Permalink
Flush progress message buffer in display().
Browse files Browse the repository at this point in the history
This will make progress display from pack-objects (invoked via
upload-pack) more responsive on platforms with an implementation
of stdio whose stderr is line buffered.

The standard error stream is defined to be merely "not fully
buffered"; this is different from "unbuffered".  If the
implementation of the stdio library chooses to make it line
buffered, progress reports that end with CR but do not contain
LF will accumulate in the stdio buffer before written out.  A
fflush() after each progress display gives a nice continuous
progress.

Signed-off-by: Johannes Sixt <johannes.sixt@telecom.at>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Johannes Sixt authored and Junio C Hamano committed Nov 20, 2007
1 parent 2439755 commit 137a0d0
Showing 1 changed file with 3 additions and 0 deletions.
3 changes: 3 additions & 0 deletions progress.c
Original file line number Diff line number Diff line change
Expand Up @@ -98,11 +98,13 @@ static int display(struct progress *progress, unsigned n, const char *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);
progress_update = 0;
return 1;
}
Expand Down Expand Up @@ -207,6 +209,7 @@ struct progress *start_progress_delay(const char *title, unsigned total,
if (!progress) {
/* unlikely, but here's a good fallback */
fprintf(stderr, "%s...\n", title);
fflush(stderr);
return NULL;
}
progress->title = title;
Expand Down

0 comments on commit 137a0d0

Please sign in to comment.