Skip to content
This repository was archived by the owner on Jan 22, 2026. It is now read-only.

Commit 1fa99d9

Browse files
committed
Allow a progress meter to be passed to CloneManager.start_duplicate
1 parent 73ae9db commit 1fa99d9

2 files changed

Lines changed: 17 additions & 16 deletions

File tree

virt-clone

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import os, sys
2424
import logging
2525
import virtinst
2626
import virtinst.CloneManager as clmgr
27+
import urlgrabber.progress as progress
2728

2829
from optparse import OptionGroup
2930
import gettext
@@ -213,7 +214,8 @@ def main():
213214
design.setup()
214215

215216
# start cloning
216-
clmgr.start_duplicate(design)
217+
meter = progress.TextMeter()
218+
clmgr.start_duplicate(design, meter)
217219

218220
logging.debug("end clone")
219221
except RuntimeError, e:

virtinst/CloneManager.py

Lines changed: 14 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import libxml2
3535
import logging
3636
import subprocess
37-
import urlgrabber.progress as progress
3837
import _util
3938
import libvirt
4039
import Guest
@@ -475,14 +474,14 @@ def _change_disk_type(self, org_type, cln_type, idxs, ctx):
475474
# start duplicate
476475
# this function clones the virtual machine according to the ClonDesign object
477476
#
478-
def start_duplicate(design):
477+
def start_duplicate(design, meter=None):
479478

480479
logging.debug("start_duplicate in")
481480

482481
# do dupulicate
483482
# at this point, handling the cloning way.
484483
if design.preserve == True:
485-
_do_duplicate(design)
484+
_do_duplicate(design, meter)
486485

487486
# define clone xml
488487
design.original_conn.defineXML(design.clone_xml)
@@ -502,7 +501,7 @@ def _vdisk_clone(path, clone):
502501
# Now this Cloning method is reading and writing devices.
503502
# For future, there are many cloning methods (e.g. fork snapshot cmd).
504503
#
505-
def _do_duplicate(design):
504+
def _do_duplicate(design, meter):
506505

507506
src_fd = None
508507
dst_fd = None
@@ -513,26 +512,26 @@ def _do_duplicate(design):
513512
sparse_copy_mode = False
514513

515514
try:
516-
for src_dev in design.original_devices:
515+
for src_dev in design.original_devices:
517516
dst_dev = dst_dev_iter.next()
518517
dst_siz = dst_siz_iter.next()
519518

520-
size = dst_siz
521-
meter = progress.TextMeter()
522-
print _("Cloning from %(src)s to %(dst)s") % {'src' : src_dev, \
523-
'dst' : dst_dev}
524-
meter.start(size=size, text=_("Cloning domain..."))
519+
meter.start(size=dst_siz,
520+
text=_("Cloning from %(src)s to %(dst)s...") % \
521+
{'src' : src_dev, 'dst' : dst_dev})
525522

526-
# skip
527523
if src_dev == "/dev/null" or src_dev == dst_dev:
528-
meter.end(size)
524+
meter.end(dst_siz)
529525
continue
530526

531-
if _util.is_vdisk(src_dev) or (os.path.exists(dst_dev) and _util.is_vdisk(dst_dev)):
527+
# vdisk specific handlings
528+
if _util.is_vdisk(src_dev) or (os.path.exists(dst_dev) and
529+
_util.is_vdisk(dst_dev)):
532530
if not _util.is_vdisk(src_dev) or os.path.exists(dst_dev):
533531
raise RuntimeError, _("copying to an existing vdisk is not supported")
534532
if not _vdisk_clone(src_dev, dst_dev):
535533
raise RuntimeError, _("failed to clone disk")
534+
meter.end(dst_siz)
536535
continue
537536

538537
#
@@ -559,7 +558,7 @@ def _do_duplicate(design):
559558
l = os.read(src_fd, design.clone_bs)
560559
s = len(l)
561560
if s == 0:
562-
meter.end(size)
561+
meter.end(dst_siz)
563562
break
564563
# check sequence of zeros
565564
if sparse_copy_mode == True and zeros == l:
@@ -570,7 +569,7 @@ def _do_duplicate(design):
570569
meter.end(i)
571570
break
572571
i += s
573-
if i < size:
572+
if i < dst_siz:
574573
meter.update(i)
575574

576575
os.close(src_fd)

0 commit comments

Comments
 (0)