Sfoglia il codice sorgente

qemu-img: Add progress output for amend

Now that bdrv_amend_options() supports a status callback, use it to
display a progress report.

Signed-off-by: Max Reitz <mreitz@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Benoît Canet <benoit.canet@nodalink.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Message-id: 1414404776-4919-3-git-send-email-mreitz@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Max Reitz 10 anni fa
parent
commit
76a3a34dce
3 ha cambiato i file con 25 aggiunte e 6 eliminazioni
  1. 2 2
      qemu-img-cmds.hx
  2. 22 3
      qemu-img.c
  3. 1 1
      qemu-img.texi

+ 2 - 2
qemu-img-cmds.hx

@@ -70,8 +70,8 @@ STEXI
 ETEXI
 ETEXI
 
 
 DEF("amend", img_amend,
 DEF("amend", img_amend,
-    "amend [-q] [-f fmt] [-t cache] -o options filename")
+    "amend [-p] [-q] [-f fmt] [-t cache] -o options filename")
 STEXI
 STEXI
-@item amend [-q] [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename}
+@item amend [-p] [-q] [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename}
 @end table
 @end table
 ETEXI
 ETEXI

+ 22 - 3
qemu-img.c

@@ -2871,6 +2871,12 @@ out:
     return 0;
     return 0;
 }
 }
 
 
+static void amend_status_cb(BlockDriverState *bs,
+                            int64_t offset, int64_t total_work_size)
+{
+    qemu_progress_print(100.f * offset / total_work_size, 0);
+}
+
 static int img_amend(int argc, char **argv)
 static int img_amend(int argc, char **argv)
 {
 {
     int c, ret = 0;
     int c, ret = 0;
@@ -2879,13 +2885,13 @@ static int img_amend(int argc, char **argv)
     QemuOpts *opts = NULL;
     QemuOpts *opts = NULL;
     const char *fmt = NULL, *filename, *cache;
     const char *fmt = NULL, *filename, *cache;
     int flags;
     int flags;
-    bool quiet = false;
+    bool quiet = false, progress = false;
     BlockBackend *blk = NULL;
     BlockBackend *blk = NULL;
     BlockDriverState *bs = NULL;
     BlockDriverState *bs = NULL;
 
 
     cache = BDRV_DEFAULT_CACHE;
     cache = BDRV_DEFAULT_CACHE;
     for (;;) {
     for (;;) {
-        c = getopt(argc, argv, "ho:f:t:q");
+        c = getopt(argc, argv, "ho:f:t:pq");
         if (c == -1) {
         if (c == -1) {
             break;
             break;
         }
         }
@@ -2915,6 +2921,9 @@ static int img_amend(int argc, char **argv)
             case 't':
             case 't':
                 cache = optarg;
                 cache = optarg;
                 break;
                 break;
+            case 'p':
+                progress = true;
+                break;
             case 'q':
             case 'q':
                 quiet = true;
                 quiet = true;
                 break;
                 break;
@@ -2925,6 +2934,11 @@ static int img_amend(int argc, char **argv)
         error_exit("Must specify options (-o)");
         error_exit("Must specify options (-o)");
     }
     }
 
 
+    if (quiet) {
+        progress = false;
+    }
+    qemu_progress_init(progress, 1.0);
+
     filename = (optind == argc - 1) ? argv[argc - 1] : NULL;
     filename = (optind == argc - 1) ? argv[argc - 1] : NULL;
     if (fmt && has_help_option(options)) {
     if (fmt && has_help_option(options)) {
         /* If a format is explicitly specified (and possibly no filename is
         /* If a format is explicitly specified (and possibly no filename is
@@ -2968,13 +2982,18 @@ static int img_amend(int argc, char **argv)
         goto out;
         goto out;
     }
     }
 
 
-    ret = bdrv_amend_options(bs, opts, NULL);
+    /* In case the driver does not call amend_status_cb() */
+    qemu_progress_print(0.f, 0);
+    ret = bdrv_amend_options(bs, opts, &amend_status_cb);
+    qemu_progress_print(100.f, 0);
     if (ret < 0) {
     if (ret < 0) {
         error_report("Error while amending options: %s", strerror(-ret));
         error_report("Error while amending options: %s", strerror(-ret));
         goto out;
         goto out;
     }
     }
 
 
 out:
 out:
+    qemu_progress_end();
+
     blk_unref(blk);
     blk_unref(blk);
     qemu_opts_del(opts);
     qemu_opts_del(opts);
     qemu_opts_free(create_opts);
     qemu_opts_free(create_opts);

+ 1 - 1
qemu-img.texi

@@ -412,7 +412,7 @@ After using this command to grow a disk image, you must use file system and
 partitioning tools inside the VM to actually begin using the new space on the
 partitioning tools inside the VM to actually begin using the new space on the
 device.
 device.
 
 
-@item amend [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename}
+@item amend [-p] [-f @var{fmt}] [-t @var{cache}] -o @var{options} @var{filename}
 
 
 Amends the image format specific @var{options} for the image file
 Amends the image format specific @var{options} for the image file
 @var{filename}. Not all file formats support this operation.
 @var{filename}. Not all file formats support this operation.