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>
This commit is contained in:
parent
53ed7b5a5d
commit
a984a06a07
10
index-pack.c
10
index-pack.c
@ -792,6 +792,7 @@ int main(int argc, char **argv)
|
|||||||
flush();
|
flush();
|
||||||
} else {
|
} else {
|
||||||
if (fix_thin_pack) {
|
if (fix_thin_pack) {
|
||||||
|
char msg[48];
|
||||||
int nr_unresolved = nr_deltas - nr_resolved_deltas;
|
int nr_unresolved = nr_deltas - nr_resolved_deltas;
|
||||||
int nr_objects_initial = nr_objects;
|
int nr_objects_initial = nr_objects;
|
||||||
if (nr_unresolved <= 0)
|
if (nr_unresolved <= 0)
|
||||||
@ -800,12 +801,11 @@ int main(int argc, char **argv)
|
|||||||
(nr_objects + nr_unresolved + 1)
|
(nr_objects + nr_unresolved + 1)
|
||||||
* sizeof(*objects));
|
* sizeof(*objects));
|
||||||
fix_unresolved_deltas(nr_unresolved);
|
fix_unresolved_deltas(nr_unresolved);
|
||||||
stop_progress(&progress);
|
sprintf(msg, "completed with %d local objects",
|
||||||
if (verbose)
|
nr_objects - nr_objects_initial);
|
||||||
fprintf(stderr, "%d objects were added to complete this thin pack.\n",
|
stop_progress_msg(&progress, msg);
|
||||||
nr_objects - nr_objects_initial);
|
|
||||||
fixup_pack_header_footer(output_fd, sha1,
|
fixup_pack_header_footer(output_fd, sha1,
|
||||||
curr_pack, nr_objects);
|
curr_pack, nr_objects);
|
||||||
}
|
}
|
||||||
if (nr_deltas != nr_resolved_deltas)
|
if (nr_deltas != nr_resolved_deltas)
|
||||||
die("pack has %d unresolved deltas",
|
die("pack has %d unresolved deltas",
|
||||||
|
19
progress.c
19
progress.c
@ -69,9 +69,9 @@ static void clear_progress_signal(void)
|
|||||||
progress_update = 0;
|
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->delay) {
|
||||||
if (!progress_update || --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;
|
progress->last_value = n;
|
||||||
tp = (progress->throughput) ? progress->throughput->display : "";
|
tp = (progress->throughput) ? progress->throughput->display : "";
|
||||||
eol = done ? ", done. \n" : " \r";
|
eol = done ? done : " \r";
|
||||||
if (progress->total) {
|
if (progress->total) {
|
||||||
unsigned percent = n * 100 / progress->total;
|
unsigned percent = n * 100 / progress->total;
|
||||||
if (percent != progress->last_percent || progress_update) {
|
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);
|
throughput_string(tp, total, rate);
|
||||||
if (progress->last_value != -1 && progress_update)
|
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)
|
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,
|
struct progress *start_progress_delay(const char *title, unsigned total,
|
||||||
@ -226,6 +226,11 @@ struct progress *start_progress(const char *title, unsigned total)
|
|||||||
}
|
}
|
||||||
|
|
||||||
void stop_progress(struct progress **p_progress)
|
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;
|
struct progress *progress = *p_progress;
|
||||||
if (!progress)
|
if (!progress)
|
||||||
@ -233,6 +238,7 @@ void stop_progress(struct progress **p_progress)
|
|||||||
*p_progress = NULL;
|
*p_progress = NULL;
|
||||||
if (progress->last_value != -1) {
|
if (progress->last_value != -1) {
|
||||||
/* Force the last update */
|
/* Force the last update */
|
||||||
|
char buf[strlen(msg) + 5];
|
||||||
struct throughput *tp = progress->throughput;
|
struct throughput *tp = progress->throughput;
|
||||||
if (tp) {
|
if (tp) {
|
||||||
unsigned int rate = !tp->avg_misecs ? 0 :
|
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);
|
throughput_string(tp, tp->curr_total, rate);
|
||||||
}
|
}
|
||||||
progress_update = 1;
|
progress_update = 1;
|
||||||
display(progress, progress->last_value, 1);
|
sprintf(buf, ", %s.\n", msg);
|
||||||
|
display(progress, progress->last_value, buf);
|
||||||
}
|
}
|
||||||
clear_progress_signal();
|
clear_progress_signal();
|
||||||
free(progress->throughput);
|
free(progress->throughput);
|
||||||
|
@ -9,5 +9,6 @@ struct progress *start_progress(const char *title, unsigned total);
|
|||||||
struct progress *start_progress_delay(const char *title, unsigned total,
|
struct progress *start_progress_delay(const char *title, unsigned total,
|
||||||
unsigned percent_treshold, unsigned delay);
|
unsigned percent_treshold, unsigned delay);
|
||||||
void stop_progress(struct progress **progress);
|
void stop_progress(struct progress **progress);
|
||||||
|
void stop_progress_msg(struct progress **progress, const char *msg);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user