From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37822) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XlGBD-0005HR-Vr for qemu-devel@nongnu.org; Mon, 03 Nov 2014 06:52:22 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XlGB7-0000ep-KJ for qemu-devel@nongnu.org; Mon, 03 Nov 2014 06:52:15 -0500 Received: from mx1.redhat.com ([209.132.183.28]:42060) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XlGB7-0000eG-DM for qemu-devel@nongnu.org; Mon, 03 Nov 2014 06:52:09 -0500 From: Stefan Hajnoczi Date: Mon, 3 Nov 2014 11:50:33 +0000 Message-Id: <1415015456-25086-31-git-send-email-stefanha@redhat.com> In-Reply-To: <1415015456-25086-1-git-send-email-stefanha@redhat.com> References: <1415015456-25086-1-git-send-email-stefanha@redhat.com> Subject: [Qemu-devel] [PULL 30/53] qemu-img: Enable progress output for commit List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Peter Maydell , Stefan Hajnoczi , Max Reitz From: Max Reitz Implement progress output for the commit command by querying the progress of the block job. Signed-off-by: Max Reitz Reviewed-by: Eric Blake Reviewed-by: Kevin Wolf Message-id: 1414159063-25977-11-git-send-email-mreitz@redhat.com Signed-off-by: Stefan Hajnoczi --- qemu-img-cmds.hx | 4 ++-- qemu-img.c | 23 +++++++++++++++++++++-- qemu-img.texi | 2 +- 3 files changed, 24 insertions(+), 5 deletions(-) diff --git a/qemu-img-cmds.hx b/qemu-img-cmds.hx index e2ceadf..fde33d1 100644 --- a/qemu-img-cmds.hx +++ b/qemu-img-cmds.hx @@ -22,9 +22,9 @@ STEXI ETEXI DEF("commit", img_commit, - "commit [-q] [-f fmt] [-t cache] [-d] filename") + "commit [-q] [-f fmt] [-t cache] [-d] [-p] filename") STEXI -@item commit [-q] [-f @var{fmt}] [-t @var{cache}] [-d] @var{filename} +@item commit [-q] [-f @var{fmt}] [-t @var{cache}] [-d] [-p] @var{filename} ETEXI DEF("compare", img_compare, diff --git a/qemu-img.c b/qemu-img.c index cf8c01c..8fec160 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) { diff --git a/qemu-img.texi b/qemu-img.texi index 420bd91..f82d1b4 100644 --- a/qemu-img.texi +++ b/qemu-img.texi @@ -167,7 +167,7 @@ this case. @var{backing_file} will never be modified unless you use the The size can also be specified using the @var{size} option with @code{-o}, it doesn't need to be specified separately in this case. -@item commit [-f @var{fmt}] [-t @var{cache}] [-d] @var{filename} +@item commit [-q] [-f @var{fmt}] [-t @var{cache}] [-d] [-p] @var{filename} Commit the changes recorded in @var{filename} in its base image or backing file. If the backing file is smaller than the snapshot, then the backing file will be -- 1.9.3