progress API: unify stop_progress{,_msg}(), fix trace2 bug
Fix a bug that's been with us ever since98a1364740
(trace2: log progress time and throughput, 2020-05-12), when the stop_progress_msg() API was used we didn't log a "region_leave" for the "region_enter" we start in "start_progress_delay()". The only user of the "stop_progress_msg()" function is "index-pack". Let's add a previously failing test to check that we have the same number of "region_enter" and "region_leave" events, with "-v" we'll log progress even in the test environment. In addition to that we've had a submarine bug here introduced with9d81ecb52b
(progress: add sparse mode to force 100% complete message, 2019-03-21). The "start_sparse_progress()" API would only do the right thing if the progress was ended with "stop_progress()", not "stop_progress_msg()". The only user of that API uses "stop_progress()", but let's still fix that along with the trace2 issue by making "stop_progress()" a trivial wrapper for "stop_progress_msg()". We can also drop the "if (progress)" test from "finish_if_sparse()". It's now a helper for the small "stop_progress_msg()" function. We'll already have returned from it if "progress" is "NULL". Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
parent
accf1eb1d0
commit
74900a6b35
21
progress.c
21
progress.c
@ -311,8 +311,7 @@ struct progress *start_delayed_sparse_progress(const char *title,
|
|||||||
|
|
||||||
static void finish_if_sparse(struct progress *progress)
|
static void finish_if_sparse(struct progress *progress)
|
||||||
{
|
{
|
||||||
if (progress &&
|
if (progress->sparse &&
|
||||||
progress->sparse &&
|
|
||||||
progress->last_value != progress->total)
|
progress->last_value != progress->total)
|
||||||
display_progress(progress, progress->total);
|
display_progress(progress, progress->total);
|
||||||
}
|
}
|
||||||
@ -347,22 +346,6 @@ static void log_trace2(struct progress *progress)
|
|||||||
trace2_region_leave("progress", progress->title, the_repository);
|
trace2_region_leave("progress", progress->title, the_repository);
|
||||||
}
|
}
|
||||||
|
|
||||||
void stop_progress(struct progress **p_progress)
|
|
||||||
{
|
|
||||||
struct progress *progress;
|
|
||||||
|
|
||||||
if (!p_progress)
|
|
||||||
BUG("don't provide NULL to stop_progress");
|
|
||||||
progress = *p_progress;
|
|
||||||
|
|
||||||
finish_if_sparse(progress);
|
|
||||||
|
|
||||||
if (progress)
|
|
||||||
log_trace2(*p_progress);
|
|
||||||
|
|
||||||
stop_progress_msg(p_progress, _("done"));
|
|
||||||
}
|
|
||||||
|
|
||||||
void stop_progress_msg(struct progress **p_progress, const char *msg)
|
void stop_progress_msg(struct progress **p_progress, const char *msg)
|
||||||
{
|
{
|
||||||
struct progress *progress;
|
struct progress *progress;
|
||||||
@ -375,8 +358,10 @@ void stop_progress_msg(struct progress **p_progress, const char *msg)
|
|||||||
return;
|
return;
|
||||||
*p_progress = NULL;
|
*p_progress = NULL;
|
||||||
|
|
||||||
|
finish_if_sparse(progress);
|
||||||
if (progress->last_value != -1)
|
if (progress->last_value != -1)
|
||||||
force_last_update(progress, msg);
|
force_last_update(progress, msg);
|
||||||
|
log_trace2(progress);
|
||||||
|
|
||||||
clear_progress_signal();
|
clear_progress_signal();
|
||||||
strbuf_release(&progress->counters_sb);
|
strbuf_release(&progress->counters_sb);
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
#ifndef PROGRESS_H
|
#ifndef PROGRESS_H
|
||||||
#define PROGRESS_H
|
#define PROGRESS_H
|
||||||
|
#include "gettext.h"
|
||||||
|
|
||||||
struct progress;
|
struct progress;
|
||||||
|
|
||||||
@ -19,5 +20,8 @@ struct progress *start_delayed_progress(const char *title, uint64_t total);
|
|||||||
struct progress *start_delayed_sparse_progress(const char *title,
|
struct progress *start_delayed_sparse_progress(const char *title,
|
||||||
uint64_t total);
|
uint64_t total);
|
||||||
void stop_progress_msg(struct progress **p_progress, const char *msg);
|
void stop_progress_msg(struct progress **p_progress, const char *msg);
|
||||||
void stop_progress(struct progress **p_progress);
|
static inline void stop_progress(struct progress **p_progress)
|
||||||
|
{
|
||||||
|
stop_progress_msg(p_progress, _("done"));
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
@ -61,7 +61,11 @@ test_expect_success 'create series of packs' '
|
|||||||
echo $cur
|
echo $cur
|
||||||
echo "$(git rev-parse :file) file"
|
echo "$(git rev-parse :file) file"
|
||||||
} | git pack-objects --stdout >tmp &&
|
} | git pack-objects --stdout >tmp &&
|
||||||
git index-pack --stdin --fix-thin <tmp || return 1
|
GIT_TRACE2_EVENT=$PWD/trace \
|
||||||
|
git index-pack -v --stdin --fix-thin <tmp || return 1 &&
|
||||||
|
grep -c region_enter.*progress trace >enter &&
|
||||||
|
grep -c region_leave.*progress trace >leave &&
|
||||||
|
test_cmp enter leave &&
|
||||||
prev=$cur
|
prev=$cur
|
||||||
done
|
done
|
||||||
'
|
'
|
||||||
|
Loading…
Reference in New Issue
Block a user