mirror of
https://github.com/git/git
synced 2024-10-03 23:29:36 +00:00
provide a facility for "delayed" progress reporting
This allows for progress to be displayed only if the progress has not reached a specified percentage treshold within a given delay in seconds. Signed-off-by: Nicolas Pitre <nico@cam.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
13aaf14825
commit
180a9f2268
34
progress.c
34
progress.c
|
@ -13,6 +13,8 @@ static void set_progress_signal(void)
|
||||||
struct sigaction sa;
|
struct sigaction sa;
|
||||||
struct itimerval v;
|
struct itimerval v;
|
||||||
|
|
||||||
|
progress_update = 0;
|
||||||
|
|
||||||
memset(&sa, 0, sizeof(sa));
|
memset(&sa, 0, sizeof(sa));
|
||||||
sa.sa_handler = progress_interval;
|
sa.sa_handler = progress_interval;
|
||||||
sigemptyset(&sa.sa_mask);
|
sigemptyset(&sa.sa_mask);
|
||||||
|
@ -35,6 +37,24 @@ static void clear_progress_signal(void)
|
||||||
|
|
||||||
int display_progress(struct progress *progress, unsigned n)
|
int display_progress(struct progress *progress, unsigned n)
|
||||||
{
|
{
|
||||||
|
if (progress->delay) {
|
||||||
|
char buf[80];
|
||||||
|
if (!progress_update || --progress->delay)
|
||||||
|
return 0;
|
||||||
|
if (progress->total) {
|
||||||
|
unsigned percent = n * 100 / progress->total;
|
||||||
|
if (percent > progress->delayed_percent_treshold) {
|
||||||
|
/* inhibit this progress report entirely */
|
||||||
|
clear_progress_signal();
|
||||||
|
progress->delay = -1;
|
||||||
|
progress->total = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (snprintf(buf, sizeof(buf),
|
||||||
|
progress->delayed_title, progress->total))
|
||||||
|
fprintf(stderr, "%s\n", buf);
|
||||||
|
}
|
||||||
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) {
|
||||||
|
@ -59,11 +79,25 @@ void start_progress(struct progress *progress, const char *title,
|
||||||
progress->prefix = prefix;
|
progress->prefix = prefix;
|
||||||
progress->total = total;
|
progress->total = total;
|
||||||
progress->last_percent = -1;
|
progress->last_percent = -1;
|
||||||
|
progress->delay = 0;
|
||||||
if (snprintf(buf, sizeof(buf), title, total))
|
if (snprintf(buf, sizeof(buf), title, total))
|
||||||
fprintf(stderr, "%s\n", buf);
|
fprintf(stderr, "%s\n", buf);
|
||||||
set_progress_signal();
|
set_progress_signal();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void start_progress_delay(struct progress *progress, const char *title,
|
||||||
|
const char *prefix, unsigned total,
|
||||||
|
unsigned percent_treshold, unsigned delay)
|
||||||
|
{
|
||||||
|
progress->prefix = prefix;
|
||||||
|
progress->total = total;
|
||||||
|
progress->last_percent = -1;
|
||||||
|
progress->delayed_percent_treshold = percent_treshold;
|
||||||
|
progress->delayed_title = title;
|
||||||
|
progress->delay = delay;
|
||||||
|
set_progress_signal();
|
||||||
|
}
|
||||||
|
|
||||||
void stop_progress(struct progress *progress)
|
void stop_progress(struct progress *progress)
|
||||||
{
|
{
|
||||||
clear_progress_signal();
|
clear_progress_signal();
|
||||||
|
|
|
@ -5,11 +5,17 @@ struct progress {
|
||||||
const char *prefix;
|
const char *prefix;
|
||||||
unsigned total;
|
unsigned total;
|
||||||
unsigned last_percent;
|
unsigned last_percent;
|
||||||
|
unsigned delay;
|
||||||
|
unsigned delayed_percent_treshold;
|
||||||
|
const char *delayed_title;
|
||||||
};
|
};
|
||||||
|
|
||||||
int display_progress(struct progress *progress, unsigned n);
|
int display_progress(struct progress *progress, unsigned n);
|
||||||
void start_progress(struct progress *progress, const char *title,
|
void start_progress(struct progress *progress, const char *title,
|
||||||
const char *prefix, unsigned total);
|
const char *prefix, unsigned total);
|
||||||
|
void start_progress_delay(struct progress *progress, const char *title,
|
||||||
|
const char *prefix, unsigned total,
|
||||||
|
unsigned percent_treshold, unsigned delay);
|
||||||
void stop_progress(struct progress *progress);
|
void stop_progress(struct progress *progress);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue