diff options
author | Edward Thomson <ethomson@edwardthomson.com> | 2022-06-11 16:51:04 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-06-11 16:51:04 -0400 |
commit | 2b28ee77ca5f03f90f616abb718168fcff6756aa (patch) | |
tree | 0144fe511ea768cc9d836e9b95718cb7592d50e3 | |
parent | 28d2ea1d28555b0ca6a218ad47ec875c51cd0507 (diff) | |
parent | 3a7371694ce3319a3d9e64a4cf960dc14536bed6 (diff) | |
download | libgit2-2b28ee77ca5f03f90f616abb718168fcff6756aa.tar.gz |
Merge pull request #6319 from libgit2/ethomson/progress_32bit
CLI: progress updates
-rw-r--r-- | src/cli/progress.c | 25 | ||||
-rw-r--r-- | src/cli/progress.h | 4 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/cli/progress.c b/src/cli/progress.c index 39b59531d..ba52655e7 100644 --- a/src/cli/progress.c +++ b/src/cli/progress.c @@ -12,7 +12,13 @@ #include "progress.h" #include "error.h" -#define PROGRESS_UPDATE_TIME 0.05 +/* + * Show updates to the percentage and number of objects received + * separately from the throughput to give an accurate progress while + * avoiding too much noise on the screen. + */ +#define PROGRESS_UPDATE_TIME 0.10 +#define THROUGHPUT_UPDATE_TIME 1.00 #define is_nl(c) ((c) == '\r' || (c) == '\n') @@ -200,11 +206,20 @@ static int fetch_receiving( else now = git__timer(); - recv_len = (double)stats->received_bytes; + if (progress->throughput_update && + now - progress->throughput_update < THROUGHPUT_UPDATE_TIME) { + elapsed = progress->throughput_update - + progress->action_start; + recv_len = progress->throughput_bytes; + } else { + elapsed = now - progress->action_start; + recv_len = (double)stats->received_bytes; + + progress->throughput_update = now; + progress->throughput_bytes = recv_len; + } - elapsed = now - progress->action_start; rate = elapsed ? recv_len / elapsed : 0; - done = (stats->received_objects == stats->total_objects); while (recv_len > 1024 && recv_units[recv_unit_idx+1]) { recv_len /= 1024; @@ -295,7 +310,7 @@ void cli_progress_checkout( } progress_printf(progress, false, - "Checking out files: %3d%% (%lu/%lu)%s\r", + "Checking out files: %3d%% (%" PRIuZ "/%" PRIuZ ")%s\r", percent(completed_steps, total_steps), completed_steps, total_steps, done ? ", done." : ""); diff --git a/src/cli/progress.h b/src/cli/progress.h index fab2e97a2..7a445ec29 100644 --- a/src/cli/progress.h +++ b/src/cli/progress.h @@ -40,6 +40,10 @@ typedef struct { git_str sideband; git_str onscreen; git_str deferred; + + /* Last update about throughput */ + double throughput_update; + double throughput_bytes; } cli_progress; #define CLI_PROGRESS_INIT { 0 } |