diff options
author | Max Reitz <mreitz@redhat.com> | 2014-10-24 15:57:39 +0200 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2014-11-03 11:41:48 +0000 |
commit | 687fa1d83013d56f7c7f9c008c956f4c26d8ba5c (patch) | |
tree | a2083fa66e5027d97e3458cbb1ca1bf24cf3ad01 /qemu-img.c | |
parent | 9a86fe489552d47b57c92782471ddfb9e7f702e2 (diff) |
qemu-img: Enable progress output for commit
Implement progress output for the commit command by querying the
progress of the block job.
Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 1414159063-25977-11-git-send-email-mreitz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'qemu-img.c')
-rw-r--r-- | qemu-img.c | 23 |
1 files changed, 21 insertions, 2 deletions
diff --git a/qemu-img.c b/qemu-img.c index cf8c01c13e..8fec160c37 100644 --- a/qemu-img.c +++ b/qemu-img.c @@ -746,9 +746,14 @@ static void run_block_job(BlockJob *job, Error **errp) do { aio_poll(aio_context, true); + qemu_progress_print((float)job->offset / job->len * 100.f, 0); } while (!job->ready); block_job_complete_sync(job, errp); + + /* A block job may finish instantaneously without publishing any progress, + * so just signal completion here */ + qemu_progress_print(100.f, 0); } static int img_commit(int argc, char **argv) @@ -757,14 +762,14 @@ static int img_commit(int argc, char **argv) const char *filename, *fmt, *cache; BlockBackend *blk; BlockDriverState *bs, *base_bs; - bool quiet = false, drop = false; + bool progress = false, quiet = false, drop = false; Error *local_err = NULL; CommonBlockJobCBInfo cbi; fmt = NULL; cache = BDRV_DEFAULT_CACHE; for(;;) { - c = getopt(argc, argv, "f:ht:dq"); + c = getopt(argc, argv, "f:ht:dpq"); if (c == -1) { break; } @@ -782,11 +787,20 @@ static int img_commit(int argc, char **argv) case 'd': drop = true; break; + case 'p': + progress = true; + break; case 'q': quiet = true; break; } } + + /* Progress is not shown in Quiet mode */ + if (quiet) { + progress = false; + } + if (optind != argc - 1) { error_exit("Expecting one image file name"); } @@ -805,6 +819,9 @@ static int img_commit(int argc, char **argv) } bs = blk_bs(blk); + qemu_progress_init(progress, 1.f); + qemu_progress_print(0.f, 100); + /* This is different from QMP, which by default uses the deepest file in the * backing chain (i.e., the very base); however, the traditional behavior of * qemu-img commit is using the immediate backing file. */ @@ -853,6 +870,8 @@ unref_backing: } done: + qemu_progress_end(); + blk_unref(blk); if (local_err) { |