@@ -271,6 +271,12 @@ static struct progress *start_progress_delay(const char *title, uint64_t total,
return progress;
}
+void progress_set_total(struct progress *progress, uint64_t total)
+{
+ if (progress)
+ progress->total = total;
+}
+
static int get_default_delay(void)
{
static int delay_in_secs = -1;
@@ -14,6 +14,7 @@ void progress_test_force_update(void);
void display_throughput(struct progress *progress, uint64_t total);
void display_progress(struct progress *progress, uint64_t n);
+void progress_set_total(struct progress *progress, uint64_t total);
struct progress *start_progress(const char *title, uint64_t total);
struct progress *start_sparse_progress(const char *title, uint64_t total);
struct progress *start_delayed_progress(const char *title, uint64_t total);
@@ -70,6 +70,11 @@ int cmd__progress(int argc, const char **argv)
if (*end != '\0')
die("invalid input: '%s'\n", line.buf);
display_progress(progress, item_count);
+ } else if (skip_prefix(line.buf, "total ", (const char **) &end)) {
+ uint64_t total = strtoull(end, &end, 10);
+ if (*end != '\0')
+ die("invalid input: '%s'\n", line.buf);
+ progress_set_total(progress, total);
} else if (skip_prefix(line.buf, "throughput ",
(const char **) &end)) {
uint64_t byte_count, test_ms;
@@ -56,6 +56,30 @@ test_expect_success 'progress display with total' '
test_cmp expect out
'
+test_expect_success 'progress display modify total' '
+ cat >expect <<-\EOF &&
+ Working hard: 1<CR>
+ Working hard: 66% (2/3)<CR>
+ Working hard: 100% (3/3)<CR>
+ Working hard: 100% (3/3), done.
+ EOF
+
+ cat >in <<-\EOF &&
+ start 0
+ update
+ progress 1
+ update
+ total 3
+ progress 2
+ progress 3
+ stop
+ EOF
+ test-tool progress <in 2>stderr &&
+
+ show_cr <stderr >out &&
+ test_cmp expect out
+'
+
test_expect_success 'progress display breaks long lines #1' '
sed -e "s/Z$//" >expect <<\EOF &&
Working hard.......2.........3.........4.........5.........6: 0% (100/100000)<CR>
We're about to add the use of progress through curl. Although, curl doesn't know the total at the start of the download, but might receive this information in the Content-Length header when the download starts. To allow users set the total size after calling start_progress(), add a function progress_set_total(). Signed-off-by: Toon Claes <toon@iotcl.com> --- progress.c | 6 ++++++ progress.h | 1 + t/helper/test-progress.c | 5 +++++ t/t0500-progress-display.sh | 24 ++++++++++++++++++++++++ 4 files changed, 36 insertions(+)