progress.c: refactor stop_progress{,_msg}() to use helpers

Create two new static helpers for the stop_progress() and
stop_progress_msg() functions.

As we'll see in the subsequent commit having those two split up
doesn't make much sense, and results in a bug in how we log to
trace2. This narrow preparatory change makes the diff for that
subsequent change smaller.

Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Ævar Arnfjörð Bjarmason 2022-02-03 22:40:17 +01:00 committed by Junio C Hamano
parent 1ccad6a1f1
commit accf1eb1d0

View File

@ -317,6 +317,36 @@ static void finish_if_sparse(struct progress *progress)
display_progress(progress, progress->total); display_progress(progress, progress->total);
} }
static void force_last_update(struct progress *progress, const char *msg)
{
char *buf;
struct throughput *tp = progress->throughput;
if (tp) {
uint64_t now_ns = progress_getnanotime(progress);
unsigned int misecs, rate;
misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
rate = tp->curr_total / (misecs ? misecs : 1);
throughput_string(&tp->display, tp->curr_total, rate);
}
progress_update = 1;
buf = xstrfmt(", %s.\n", msg);
display(progress, progress->last_value, buf);
free(buf);
}
static void log_trace2(struct progress *progress)
{
trace2_data_intmax("progress", the_repository, "total_objects",
progress->total);
if (progress->throughput)
trace2_data_intmax("progress", the_repository, "total_bytes",
progress->throughput->curr_total);
trace2_region_leave("progress", progress->title, the_repository);
}
void stop_progress(struct progress **p_progress) void stop_progress(struct progress **p_progress)
{ {
struct progress *progress; struct progress *progress;
@ -327,17 +357,8 @@ void stop_progress(struct progress **p_progress)
finish_if_sparse(progress); finish_if_sparse(progress);
if (progress) { if (progress)
trace2_data_intmax("progress", the_repository, "total_objects", log_trace2(*p_progress);
progress->total);
if (progress->throughput)
trace2_data_intmax("progress", the_repository,
"total_bytes",
progress->throughput->curr_total);
trace2_region_leave("progress", progress->title, the_repository);
}
stop_progress_msg(p_progress, _("done")); stop_progress_msg(p_progress, _("done"));
} }
@ -353,23 +374,10 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)
if (!progress) if (!progress)
return; return;
*p_progress = NULL; *p_progress = NULL;
if (progress->last_value != -1) {
/* Force the last update */
char *buf;
struct throughput *tp = progress->throughput;
if (tp) { if (progress->last_value != -1)
uint64_t now_ns = progress_getnanotime(progress); force_last_update(progress, msg);
unsigned int misecs, rate;
misecs = ((now_ns - progress->start_ns) * 4398) >> 32;
rate = tp->curr_total / (misecs ? misecs : 1);
throughput_string(&tp->display, tp->curr_total, rate);
}
progress_update = 1;
buf = xstrfmt(", %s.\n", msg);
display(progress, progress->last_value, buf);
free(buf);
}
clear_progress_signal(); clear_progress_signal();
strbuf_release(&progress->counters_sb); strbuf_release(&progress->counters_sb);
if (progress->throughput) if (progress->throughput)