diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt index b03ca3c2..b046c66e 100644 --- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt +++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt @@ -73,5 +73,5 @@ -test-vmx-zip.zip appears to be an archive, running: unar -o /var/tmp/virt-convert-tmp test-vmx-zip.zip +test-vmx-zip.zip appears to be an archive, running: unzip -o -d /var/tmp/virt-convert-tmp /home/crobinso/src/virt-manager/tests/virtconv-files/vmx_input/test-vmx-zip.zip Copying MS-DOS.vmdk to /var/lib/libvirt/images/MS-DOS diff --git a/tests/virtconvtest.py b/tests/virtconvtest.py index 7f1c7356..622117fb 100644 --- a/tests/virtconvtest.py +++ b/tests/virtconvtest.py @@ -15,7 +15,6 @@ # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, # MA 02110-1301 USA. -from distutils.spawn import find_executable import glob import os import StringIO @@ -66,10 +65,6 @@ class TestVirtConv(unittest.TestCase): if disk_format: out_path += ".disk_%s" % disk_format - if (os.path.splitext(in_path)[1] in [".zip"] and - not find_executable("unar")): - self.skipTest("Install 'unar' to run all tests.") - try: os.chdir(os.path.dirname(in_path)) self._convert_helper(in_path, out_path, in_type, disk_format) diff --git a/virtconv/formats.py b/virtconv/formats.py index 9a6d2370..ed8a66ee 100644 --- a/virtconv/formats.py +++ b/virtconv/formats.py @@ -118,6 +118,8 @@ def _find_input(input_file, parser, print_cb): try: ext = os.path.splitext(input_file)[1] tempdir = None + binname = None + pkg = None if ext and ext[1:] in ["zip", "gz", "ova", "tar", "bz2", "bzip2", "7z", "xz"]: basedir = "/var/tmp" @@ -129,19 +131,40 @@ def _find_input(input_file, parser, print_cb): base = os.path.basename(input_file) - # check if 'unar' command existed. - if not find_executable("unar"): + if (ext[1:] == "zip"): + binname = "unzip" + pkg = "unzip" + cmd = ["unzip", "-o", "-d", tempdir, input_file] + elif (ext[1:] == "7z"): + binname = "7z" + pkg = "p7zip" + cmd = ["7z", "-o" + tempdir, "e", input_file] + elif (ext[1:] == "ova" or ext[1:] == "tar"): + binname = "tar" + pkg = "tar" + cmd = ["tar", "xf", input_file, "-C", tempdir] + elif (ext[1:] == "gz"): + binname = "gzip" + pkg = "gzip" + cmd = ["tar", "zxf", input_file, "-C", tempdir] + elif (ext[1:] == "bz2" or ext[1:] == "bzip2"): + binname = "bzip2" + pkg = "bzip2" + cmd = ["tar", "jxf", input_file, "-C", tempdir] + elif (ext[1:] == "xz"): + binname = "xz" + pkg = "xz" + cmd = ["tar", "Jxf", input_file, "-C", tempdir] + if not find_executable(binname): raise RuntimeError(_("%s appears to be an archive, " - "but 'unar' is not installed. " - "Please either install 'unar', or extract the archive " + "but '%s' is not installed. " + "Please either install '%s', or extract the archive " "yourself and point virt-convert at " - "the extracted directory.") % base) + "the extracted directory.") % (base, pkg, pkg)) - cmd = ["unar", "-o", tempdir, base] print_cb(_("%s appears to be an archive, running: %s") % (base, " ".join(cmd))) - cmd[-1] = input_file _run_cmd(cmd) force_clean.append(tempdir) input_file = tempdir