import re
import sys
import guestfs
+import shutil
from sendfile import sendfile
self.tmp = tempfile.mkdtemp(prefix='.snf_image_creator.',
dir=self._get_tmp_dir(tmp))
- self._add_cleanup(os.removedirs, self.tmp)
+ self._add_cleanup(shutil.rmtree, self.tmp)
def _get_tmp_dir(self, default=None):
if default is not None:
self.size = 0
self.g = guestfs.GuestFS()
- self.g.add_drive_opts(self.real_device, readonly=0)
+ self.g.add_drive_opts(self.real_device, readonly=0, format="raw")
# Before version 1.17.14 the recovery process, which is a fork of the
# original process that called libguestfs, did not close its inherited
progressbar.next()
while left > 0:
length = min(left, blocksize)
- _, sent = sendfile(dst.fileno(), src.fileno(), offset,
- length)
+ sent = sendfile(dst.fileno(), src.fileno(), offset, length)
+
+ # Workaround for python-sendfile API change. In
+ # python-sendfile 1.2.x (py-sendfile) the returning value
+ # of sendfile is a tuple, where in version 2.x (pysendfile)
+ # it is just a sigle integer.
+ if isinstance(sent, tuple):
+ sent = sent[1]
+
offset += sent
left -= sent
progressbar.goto((size - left) // MB)