diff options
author | Nicolas Pitre <nico@cam.org> | 2007-11-08 15:45:41 -0500 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-11-08 15:43:41 -0800 |
commit | a984a06a07cdd0a843eb6107ad56e346d99ac840 (patch) | |
tree | becc999b97530e57e9fa3941914f8473a8d67b24 /progress.c | |
parent | 53ed7b5a5d7a0ad2ffafd4a4ba4a7861f5db624e (diff) | |
download | git-a984a06a07cdd0a843eb6107ad56e346d99ac840.tar.gz |
nicer display of thin pack completion
In the same spirit of prettifying Git's output display for mere mortals,
here's a simple extension to the progress API allowing for a final
message to be provided when terminating a progress line, and use it for
the display of the number of objects needed to complete a thin pack,
saving yet one more line of screen display.
Signed-off-by: Nicolas Pitre <nico@cam.org>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
Diffstat (limited to 'progress.c')
-rw-r--r-- | progress.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/progress.c b/progress.c index 0700dcf24a..4bd650f9ba 100644 --- a/progress.c +++ b/progress.c @@ -69,9 +69,9 @@ static void clear_progress_signal(void) progress_update = 0; } -static int display(struct progress *progress, unsigned n, int done) +static int display(struct progress *progress, unsigned n, const char *done) { - char *eol, *tp; + const char *eol, *tp; if (progress->delay) { if (!progress_update || --progress->delay) @@ -90,7 +90,7 @@ static int display(struct progress *progress, unsigned n, int done) progress->last_value = n; tp = (progress->throughput) ? progress->throughput->display : ""; - eol = done ? ", done. \n" : " \r"; + eol = done ? done : " \r"; if (progress->total) { unsigned percent = n * 100 / progress->total; if (percent != progress->last_percent || progress_update) { @@ -191,13 +191,13 @@ void display_throughput(struct progress *progress, off_t total) throughput_string(tp, total, rate); if (progress->last_value != -1 && progress_update) - display(progress, progress->last_value, 0); + display(progress, progress->last_value, NULL); } } int display_progress(struct progress *progress, unsigned n) { - return progress ? display(progress, n, 0) : 0; + return progress ? display(progress, n, NULL) : 0; } struct progress *start_progress_delay(const char *title, unsigned total, @@ -227,12 +227,18 @@ struct progress *start_progress(const char *title, unsigned total) void stop_progress(struct progress **p_progress) { + stop_progress_msg(p_progress, "done"); +} + +void stop_progress_msg(struct progress **p_progress, const char *msg) +{ struct progress *progress = *p_progress; if (!progress) return; *p_progress = NULL; if (progress->last_value != -1) { /* Force the last update */ + char buf[strlen(msg) + 5]; struct throughput *tp = progress->throughput; if (tp) { unsigned int rate = !tp->avg_misecs ? 0 : @@ -240,7 +246,8 @@ void stop_progress(struct progress **p_progress) throughput_string(tp, tp->curr_total, rate); } progress_update = 1; - display(progress, progress->last_value, 1); + sprintf(buf, ", %s.\n", msg); + display(progress, progress->last_value, buf); } clear_progress_signal(); free(progress->throughput); |