Hello community,

here is the log from the commit of package virt-manager for openSUSE:Factory 
checked in at 2017-10-31 15:44:34
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/virt-manager (Old)
 and      /work/SRC/openSUSE:Factory/.virt-manager.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "virt-manager"

Tue Oct 31 15:44:34 2017 rev:158 rq:537741 version:1.4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes        
2017-10-13 14:18:52.360881320 +0200
+++ /work/SRC/openSUSE:Factory/.virt-manager.new/virt-manager.changes   
2017-10-31 15:44:36.332457031 +0100
@@ -1,0 +2,33 @@
+Fri Oct 27 14:19:35 MDT 2017 - carn...@suse.com
+
+- Upstream bug fixes (bsc#1027942)
+  9a9f9ecd-ignore-comments-in-keymap-conf-files.patch
+  9617d126-systray-Use-APPLICATION_STATUS-for-appindicator.patch
+  e73abe5a-diskbackend-convert-to-long-the-calculated-size.patch
+  
6e6f59e7-diskbackend-get-a-proper-size-of-existing-block-device-while-cloning.patch
+  23aaf852-network-Set-bridge-name-to-None-instead-of-blank.patch
+  d1e1cf64-progress-remove-trailing-white-space.patch
+  63fce081-pycodestyle-Use-isinstance-for-type-checking.patch
+  08a58d61-pycodestyle-remove-description-of-fixed-errors.patch
+  bc3c9a9d-progress-remove-unused-import.patch
+  2d276ebe-progress-dont-overwrite-format.patch
+  e2ad4b2f-convert-iteritems-to-items.patch
+  dff00d4f-remove-deprecated-statvfs-module.patch
+  75210ed3-replace-StringIO-with-io.patch
+  a2bcd6c4-dont-compare-between-None-and-int.patch
+  44de92b7-use-reload-from-imp-module.patch
+  69c84bea-import-reduce-from-functools-module.patch
+  37ea5207-replace-StandardError-with-Exception.patch
+  f41aafc7-Use-enumerate-instead-of-range-and-len.patch
+  91c0669c-cli-Fix-OrderedDict-mutated-during-iteration-on-python3.patch
+  b8fa0c6b-xmlnsqemu-order-XML-output-like-libvirt-does.patch
+  d2648d81-virtconv-dont-implicitly-depend-on-dict-hash-order.patch
+  999dbb36-cli-Make-VirtCLIArgument-instantiation-less-crazy.patch
+  7f1b4cee-pycodestyle-fix-all-E125-warnings.patch
+  d82022bd-manager-drop-python2-only-cmp-usage.patch
+  374a3779-urlfetcher-write-test-file-as-binary-content.patch
+  f7c8cf9f-devicepanic-dont-return-empty-model-list.patch
+  3be78d1f-addhardware-dont-allow-panic-option-where-not-supported.patch
+  73de8285-systray-remove-redundant-variable-assignment.patch
+
+-------------------------------------------------------------------

New:
----
  08a58d61-pycodestyle-remove-description-of-fixed-errors.patch
  23aaf852-network-Set-bridge-name-to-None-instead-of-blank.patch
  2d276ebe-progress-dont-overwrite-format.patch
  374a3779-urlfetcher-write-test-file-as-binary-content.patch
  37ea5207-replace-StandardError-with-Exception.patch
  3be78d1f-addhardware-dont-allow-panic-option-where-not-supported.patch
  44de92b7-use-reload-from-imp-module.patch
  63fce081-pycodestyle-Use-isinstance-for-type-checking.patch
  69c84bea-import-reduce-from-functools-module.patch
  
6e6f59e7-diskbackend-get-a-proper-size-of-existing-block-device-while-cloning.patch
  73de8285-systray-remove-redundant-variable-assignment.patch
  75210ed3-replace-StringIO-with-io.patch
  7f1b4cee-pycodestyle-fix-all-E125-warnings.patch
  91c0669c-cli-Fix-OrderedDict-mutated-during-iteration-on-python3.patch
  9617d126-systray-Use-APPLICATION_STATUS-for-appindicator.patch
  999dbb36-cli-Make-VirtCLIArgument-instantiation-less-crazy.patch
  9a9f9ecd-ignore-comments-in-keymap-conf-files.patch
  a2bcd6c4-dont-compare-between-None-and-int.patch
  b8fa0c6b-xmlnsqemu-order-XML-output-like-libvirt-does.patch
  bc3c9a9d-progress-remove-unused-import.patch
  d1e1cf64-progress-remove-trailing-white-space.patch
  d2648d81-virtconv-dont-implicitly-depend-on-dict-hash-order.patch
  d82022bd-manager-drop-python2-only-cmp-usage.patch
  dff00d4f-remove-deprecated-statvfs-module.patch
  e2ad4b2f-convert-iteritems-to-items.patch
  e73abe5a-diskbackend-convert-to-long-the-calculated-size.patch
  f41aafc7-Use-enumerate-instead-of-range-and-len.patch
  f7c8cf9f-devicepanic-dont-return-empty-model-list.patch

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ virt-manager.spec ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.360419767 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.364419622 +0100
@@ -41,6 +41,34 @@
 Patch1:         3b769643-dont-add-URI-into-params-for-tunneled-migration.patch
 Patch2:         6dfc4de1-add-support-for-parsing-formatting-SR-IOV-VFs.patch
 Patch3:         083dfcc8-Show-details-about-the-network-of-SR-IOV-VF-pool.patch
+Patch4:         9a9f9ecd-ignore-comments-in-keymap-conf-files.patch
+Patch5:         9617d126-systray-Use-APPLICATION_STATUS-for-appindicator.patch
+Patch6:         e73abe5a-diskbackend-convert-to-long-the-calculated-size.patch
+Patch7:         
6e6f59e7-diskbackend-get-a-proper-size-of-existing-block-device-while-cloning.patch
+Patch8:         23aaf852-network-Set-bridge-name-to-None-instead-of-blank.patch
+Patch9:         d1e1cf64-progress-remove-trailing-white-space.patch
+Patch10:        63fce081-pycodestyle-Use-isinstance-for-type-checking.patch
+Patch11:        08a58d61-pycodestyle-remove-description-of-fixed-errors.patch
+Patch12:        bc3c9a9d-progress-remove-unused-import.patch
+Patch13:        2d276ebe-progress-dont-overwrite-format.patch
+Patch14:        e2ad4b2f-convert-iteritems-to-items.patch
+Patch15:        dff00d4f-remove-deprecated-statvfs-module.patch
+Patch16:        75210ed3-replace-StringIO-with-io.patch
+Patch17:        a2bcd6c4-dont-compare-between-None-and-int.patch
+Patch18:        44de92b7-use-reload-from-imp-module.patch
+Patch19:        69c84bea-import-reduce-from-functools-module.patch
+Patch20:        37ea5207-replace-StandardError-with-Exception.patch
+Patch21:        f41aafc7-Use-enumerate-instead-of-range-and-len.patch
+Patch22:        
91c0669c-cli-Fix-OrderedDict-mutated-during-iteration-on-python3.patch
+Patch23:        b8fa0c6b-xmlnsqemu-order-XML-output-like-libvirt-does.patch
+Patch24:        
d2648d81-virtconv-dont-implicitly-depend-on-dict-hash-order.patch
+Patch25:        
999dbb36-cli-Make-VirtCLIArgument-instantiation-less-crazy.patch
+Patch26:        7f1b4cee-pycodestyle-fix-all-E125-warnings.patch
+Patch27:        d82022bd-manager-drop-python2-only-cmp-usage.patch
+Patch28:        374a3779-urlfetcher-write-test-file-as-binary-content.patch
+Patch29:        f7c8cf9f-devicepanic-dont-return-empty-model-list.patch
+Patch30:        
3be78d1f-addhardware-dont-allow-panic-option-where-not-supported.patch
+Patch31:        73de8285-systray-remove-redundant-variable-assignment.patch
 # SUSE Only
 Patch70:        virtman-desktop.patch
 Patch71:        virtman-kvm.patch
@@ -169,6 +197,34 @@
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
+%patch4 -p1
+%patch5 -p1
+%patch6 -p1
+%patch7 -p1
+%patch8 -p1
+%patch9 -p1
+%patch10 -p1
+%patch11 -p1
+%patch12 -p1
+%patch13 -p1
+%patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
+%patch21 -p1
+%patch22 -p1
+%patch23 -p1
+%patch24 -p1
+%patch25 -p1
+%patch26 -p1
+%patch27 -p1
+%patch28 -p1
+%patch29 -p1
+%patch30 -p1
+%patch31 -p1
 # SUSE Only
 %patch70 -p1
 %patch71 -p1

++++++ 08a58d61-pycodestyle-remove-description-of-fixed-errors.patch ++++++
Subject: pycodestyle: Remove description of fixed errors
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:42 2017 +0100
Date: Fri Oct 20 11:49:14 2017 -0400:
Git: 08a58d61450def03e840afe66c63998fc75211be


diff --git a/tests/pycodestyle.cfg b/tests/pycodestyle.cfg
index 38584d81..4ba9cf60 100644
--- a/tests/pycodestyle.cfg
+++ b/tests/pycodestyle.cfg
@@ -6,7 +6,6 @@ format = pylint
 # https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
 
 
-# E121: Continuation line under-indented for hanging indent
 # E122: Continuation line missing indentation or outdented
 # E123: Closing bracket does not match indentation of opening
 #       bracket's line
@@ -23,7 +22,6 @@ format = pylint
 # E306: Expected 1 blank line before a nested definition
 # E402: Module level import not at top of file
 # E501: Line too long (82 > 79 characters)
-# E722: Do not use bare except, specify exception instead
 # E741: Do not use variables named ‘l’, ‘O’, or ‘I’
 
 
++++++ 23aaf852-network-Set-bridge-name-to-None-instead-of-blank.patch ++++++
Subject: network: Set bridge name to None instead of blank
From: Lin Ma l...@suse.com Thu Oct 19 16:56:42 2017 +0800
Date: Thu Oct 19 18:09:19 2017 -0400:
Git: 23aaf8527d63f4565661e0d582bb88af839d4dce

Trigger libvirt error if user leaves 'net-bridge-name' GtkEntry
blank when specifying shared device name.

Signed-off-by: Lin Ma <l...@suse.com>

diff --git a/virtManager/netlist.py b/virtManager/netlist.py
index 772e988d..4f1e991a 100644
--- a/virtManager/netlist.py
+++ b/virtManager/netlist.py
@@ -314,7 +314,7 @@ class vmmNetworkList(vmmGObjectUI):
 
         if net_check_bridge and bridge_entry:
             net_type = virtinst.VirtualNetworkInterface.TYPE_BRIDGE
-            net_src = bridge_entry.get_text()
+            net_src = bridge_entry.get_text() or None
 
         mode = None
         if self.widget("net-source-mode").is_visible():
++++++ 2d276ebe-progress-dont-overwrite-format.patch ++++++
Subject: progress: Don't overwrite "format"
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:44 2017 +0100
Date: Fri Oct 20 11:49:14 2017 -0400:
Git: 2d276ebed84ba9f468243989d219940883cf72ad

Do not overwrite built-in format. [1]

https://docs.python.org/2/library/functions.html#format

diff --git a/virtinst/progress.py b/virtinst/progress.py
index 05114ed4..2b070540 100644
--- a/virtinst/progress.py
+++ b/virtinst/progress.py
@@ -484,12 +484,12 @@ def format_number(number, SI=0, space=' '):
     if isinstance(number, int) or isinstance(number, long):
         # it's an int or a long, which means it didn't get divided,
         # which means it's already short enough
-        format = '%i%s%s'
+        fmt = '%i%s%s'
     elif number < 9.95:
         # must use 9.95 for proper sizing.  For example, 9.99 will be
         # rounded to 10.0 with the .1f format string (which is too long)
-        format = '%.1f%s%s'
+        fmt = '%.1f%s%s'
     else:
-        format = '%.0f%s%s'
+        fmt = '%.0f%s%s'
 
-    return(format % (float(number or 0), space, symbols[depth]))
+    return(fmt % (float(number or 0), space, symbols[depth]))
++++++ 374a3779-urlfetcher-write-test-file-as-binary-content.patch ++++++
Subject: urlfetcher: Write test file as binary content
From: Cole Robinson crobi...@redhat.com Sat Oct 21 19:33:30 2017 -0400
Date: Sat Oct 21 19:41:33 2017 -0400:
Git: 374a3779c402b931554aea06c42a9dcb49c35406

Triggers an test_ui error otherwise:

TypeError: write() argument must be str, not bytes

diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py
index a45c6383..5dae424c 100644
--- a/virtinst/urlfetcher.py
+++ b/virtinst/urlfetcher.py
@@ -155,7 +155,7 @@ class _URLFetcher(object):
         # pylint: disable=redefined-variable-type
         if "VIRTINST_TEST_SUITE" in os.environ:
             fn = os.path.join("/tmp", prefix)
-            fileobj = open(fn, "w")
+            fileobj = open(fn, "wb")
         else:
             fileobj = tempfile.NamedTemporaryFile(
                 dir=self.scratchdir, prefix=prefix, delete=False)
++++++ 37ea5207-replace-StandardError-with-Exception.patch ++++++
Subject: Replace 'StandardError' with 'Exception'
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:36:01 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: 37ea520773bc7339e114915daac1ca1a8a0334bd

Python 2 has an exception class called StandardError that has
been removed in Python 3. Use Exception instead. [1]

[1] http://python3porting.com/differences.html#standarderror

diff --git a/virtconv/ovf.py b/virtconv/ovf.py
index 3ba21313..16ec5681 100644
--- a/virtconv/ovf.py
+++ b/virtconv/ovf.py
@@ -269,10 +269,9 @@ def _import_file(doc, ctx, conn, input_file):
 
         if not bool_val(env_node.prop("required")):
             continue
-        raise StandardError(_("OVF section '%s' is listed as "
-                              "required, but parser doesn't know "
-                              "how to handle it.") %
-                              env_node.name)
+        raise Exception(_("OVF section '%s' is listed as "
+                          "required, but parser doesn't know "
+                          "how to handle it.") % env_node.name)
 
     disk_buses = {}
     for node in ctx.xpathEval(vhbase % DEVICE_IDE_BUS):
++++++ 3be78d1f-addhardware-dont-allow-panic-option-where-not-supported.patch 
++++++
Subject: addhardware: Don't allow panic option where it isn't supported
From: Cole Robinson crobi...@redhat.com Fri Oct 27 09:47:38 2017 +0200
Date: Fri Oct 27 09:47:38 2017 +0200:
Git: 3be78d1f3f1a3925b3bf04f0ffded21715bcf9e9

Like aarch64, basically any arch that doesn't have an explicit panic
model

diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index 3793006c..cd82cd3e 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -404,8 +404,9 @@ class vmmAddHardware(vmmGObjectUI):
                       True, None)
         add_hw_option(_("RNG"), "system-run", PAGE_RNG, True, None)
         add_hw_option(_("Panic Notifier"), "system-run", PAGE_PANIC,
-            self.conn.check_support(self.conn.SUPPORT_CONN_PANIC_DEVICE),
-            _("Not supported for this hypervisor/libvirt combination."))
+            self.conn.check_support(self.conn.SUPPORT_CONN_PANIC_DEVICE) and
+            virtinst.VirtualPanicDevice.get_models(self.vm.get_xmlobj().os),
+            _("Not supported for this hypervisor/libvirt/arch combination."))
 
     def _reset_state(self):
         # Storage init
++++++ 44de92b7-use-reload-from-imp-module.patch ++++++
Subject: Use reload() from imp module
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:56 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: 44de92b772dcb264a75832a46d4cf85e21799316

In Python 3 the reload() function [1] has been moved in the imp
module. [2]

[1] https://docs.python.org/2/library/functions.html#reload
[2] https://docs.python.org/3/library/importlib.html#importlib.reload

diff --git a/tests/__init__.py b/tests/__init__.py
index 19b5d3e9..bea21d85 100644
--- a/tests/__init__.py
+++ b/tests/__init__.py
@@ -28,7 +28,7 @@ os.environ["VIRTINST_TEST_URL_DIR"] = os.path.abspath(
 # pylint: disable=wrong-import-position
 from virtcli import cliconfig
 # This sets all the cli bits back to their defaults
-reload(cliconfig)
+imp.reload(cliconfig)
 
 from tests import utils
 
++++++ 63fce081-pycodestyle-Use-isinstance-for-type-checking.patch ++++++
Subject: pycodestyle: Use isinstance() for type checking
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:41 2017 +0100
Date: Fri Oct 20 11:49:13 2017 -0400:
Git: 63fce081ed1e4edf44077546d98b4fcdb3f4884c

This is E721 in pycodestyle [1]:
   "do not compare types, use ‘isinstance()’"

The main differece between "type() is" and "isinstance()" is that
isinstance() supports inheritance. [1]

This can be seen in the example below:
    >>> type(True) is int
    False
    >>> isinstance(True, int)
    True

As we can see in python 'bool' a subclass of 'int'.

[1] https://pycodestyle.readthedocs.io/en/latest/intro.html#error-codes
[2] https://docs.python.org/2/library/functions.html#isinstance

diff --git a/tests/clitest.py b/tests/clitest.py
index 7e9e6684..bdc1b448 100644
--- a/tests/clitest.py
+++ b/tests/clitest.py
@@ -201,7 +201,7 @@ class Command(object):
         if conn is None:
             raise RuntimeError("skip check is not None, but conn is None")
 
-        if type(check) is str:
+        if isinstance(check, str):
             # pylint: disable=protected-access
             if support._check_version(conn, check):
                 return
diff --git a/virtManager/connection.py b/virtManager/connection.py
index 70da9220..0f7e20db 100644
--- a/virtManager/connection.py
+++ b/virtManager/connection.py
@@ -1088,7 +1088,7 @@ class vmmConnection(vmmGObject):
         try:
             self._backend.setKeepAlive(20, 1)
         except Exception as e:
-            if (type(e) is not AttributeError and
+            if (not isinstance(e, AttributeError) and
                 not util.is_error_nosupport(e)):
                 raise
             logging.debug("Connection doesn't support KeepAlive, "
diff --git a/virtManager/create.py b/virtManager/create.py
index c695b2b2..1fbc65ef 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -1692,7 +1692,7 @@ class vmmCreate(vmmGObjectUI):
         else:
             def callback(ignore, text):
                 widget = cbwidget
-                if type(cbwidget) is str:
+                if isinstance(cbwidget, str):
                     widget = self.widget(cbwidget)
                 widget.set_text(text)
 
diff --git a/virtManager/details.py b/virtManager/details.py
index e74ea5f7..aeac7fd3 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -1520,7 +1520,7 @@ class vmmDetails(vmmGObjectUI):
         # On Fedora 19, ret is (bool, str)
         # Someday the bindings might be fixed to just return the str, try
         # and future proof it a bit
-        if type(ret) is tuple and len(ret) >= 2:
+        if isinstance(ret, tuple) and len(ret) >= 2:
             ret = ret[1]
         # F24 rawhide, ret[1] is a named tuple with a 'buffer' element...
         if hasattr(ret, "buffer"):
@@ -3218,7 +3218,7 @@ class vmmDetails(vmmGObjectUI):
             olddev = hw_list_model[i][HW_LIST_COL_DEVICE]
 
             # Existing device, don't remove it
-            if type(olddev) is str or olddev in currentDevices:
+            if isinstance(olddev, str) or olddev in currentDevices:
                 continue
 
             hw_list_model.remove(_iter)
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 724f83fd..1b278815 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -83,7 +83,7 @@ def compare_device(origdev, newdev, idx):
     if id(origdev) == id(newdev):
         return True
 
-    if type(origdev) is not type(newdev):
+    if not isinstance(origdev, type(newdev)):
         return False
 
     for devprop in devprops[origdev.virtual_device_type]:
diff --git a/virtManager/error.py b/virtManager/error.py
index 1de6c8b1..1a8fae5a 100644
--- a/virtManager/error.py
+++ b/virtManager/error.py
@@ -275,7 +275,7 @@ class vmmErrorDialog(vmmGObject):
         if _type is not None:
             pattern = _type
             name = None
-            if type(_type) is tuple:
+            if isinstance(_type, tuple):
                 pattern = _type[0]
                 name = _type[1]
 
diff --git a/virtManager/module_trace.py b/virtManager/module_trace.py
index 8d600f4e..ff76504f 100644
--- a/virtManager/module_trace.py
+++ b/virtManager/module_trace.py
@@ -83,7 +83,7 @@ def wrap_class(classobj):
 
     for name in dir(classobj):
         obj = getattr(classobj, name)
-        if type(obj) is MethodType:
+        if isinstance(obj, MethodType):
             wrap_method(classobj, obj)
 
 
@@ -92,7 +92,7 @@ def wrap_module(module, regex=None):
         if regex and not re.match(regex, name):
             continue
         obj = getattr(module, name)
-        if type(obj) is FunctionType:
+        if isinstance(obj, FunctionType):
             wrap_func(module, obj)
-        if type(obj) is ClassType or type(obj) is type:
+        if isinstance(obj, (ClassType, type)):
             wrap_class(obj)
diff --git a/virtManager/packageutils.py b/virtManager/packageutils.py
index 37f96c38..153cc55b 100644
--- a/virtManager/packageutils.py
+++ b/virtManager/packageutils.py
@@ -38,7 +38,7 @@ def check_packagekit(parent, errbox, packages):
     if not packages:
         logging.debug("No PackageKit packages to search for.")
         return
-    if type(packages) is not list:
+    if not isinstance(packages, list):
         packages = [packages]
 
     logging.debug("PackageKit check/install for packages=%s", packages)
diff --git a/virtManager/uiutil.py b/virtManager/uiutil.py
index 2965c51b..d07c2a1e 100644
--- a/virtManager/uiutil.py
+++ b/virtManager/uiutil.py
@@ -155,7 +155,7 @@ def set_grid_row_visible(child, visible):
     based on UI interraction
     """
     parent = child.get_parent()
-    if type(parent) is not Gtk.Grid:
+    if not isinstance(parent, Gtk.Grid):
         raise RuntimeError("Programming error, parent must be grid, "
                            "not %s" % type(parent))
 
diff --git a/virtManager/viewers.py b/virtManager/viewers.py
index 80bdb083..df164f59 100644
--- a/virtManager/viewers.py
+++ b/virtManager/viewers.py
@@ -614,7 +614,7 @@ class SpiceViewer(Viewer):
         GObject.GObject.connect(channel, "open-fd",
                                 self._channel_open_fd_request)
 
-        if (type(channel) == SpiceClientGLib.MainChannel and
+        if (isinstance(channel, SpiceClientGLib.MainChannel) and
             not self._main_channel):
             self._main_channel = channel
             hid = self._main_channel.connect_after("channel-event",
diff --git a/virtconv/ovf.py b/virtconv/ovf.py
index 0a770c98..3ba21313 100644
--- a/virtconv/ovf.py
+++ b/virtconv/ovf.py
@@ -151,7 +151,7 @@ def _import_file(doc, ctx, conn, input_file):
         ret = ctx.xpathEval(path)
         result = None
         if ret is not None:
-            if type(ret) == list:
+            if isinstance(ret, list):
                 if len(ret) >= 1:
                     result = ret[0].content
             else:
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 17a2e70f..1b86cad5 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1002,7 +1002,7 @@ def _parse_optstr_to_dict(optstr, virtargs, remove_first):
             virtarg.is_list):
             optdict[cliname] = []
 
-        if type(optdict.get(cliname)) is list:
+        if isinstance(optdict.get(cliname), list):
             optdict[cliname].append(val)
         else:
             optdict[cliname] = val
@@ -2591,7 +2591,7 @@ class _ParserChar(VirtCLIParser):
     stub_none = False
 
     def support_check(self, inst, virtarg):
-        if type(virtarg.attrname) is not str:
+        if not isinstance(virtarg.attrname, str):
             return
         if not inst.supports_property(virtarg.attrname):
             raise ValueError(_("%(devtype)s type '%(chartype)s' does not "
diff --git a/virtinst/cloner.py b/virtinst/cloner.py
index 72642f60..7345bdad 100644
--- a/virtinst/cloner.py
+++ b/virtinst/cloner.py
@@ -88,7 +88,7 @@ class Cloner(object):
                               doc="Original guest name.")
 
     def set_original_xml(self, val):
-        if type(val) is not str:
+        if not isinstance(val, str):
             raise ValueError(_("Original xml must be a string."))
         self._original_xml = val
         self._original_guest = Guest(self.conn,
@@ -214,7 +214,7 @@ class Cloner(object):
                                "(not Cloner.preserve)")
 
     def set_force_target(self, dev):
-        if type(dev) is list:
+        if isinstance(dev, list):
             self._force_target = dev[:]
         else:
             self._force_target.append(dev)
@@ -225,7 +225,7 @@ class Cloner(object):
                                 "despite Cloner's recommendation.")
 
     def set_skip_target(self, dev):
-        if type(dev) is list:
+        if isinstance(dev, list):
             self._skip_target = dev[:]
         else:
             self._skip_target.append(dev)
@@ -237,7 +237,7 @@ class Cloner(object):
                                "takes precedence over force_target.")
 
     def set_clone_policy(self, policy_list):
-        if type(policy_list) != list:
+        if not isinstance(policy_list, list):
             raise ValueError(_("Cloning policy must be a list of rules."))
         self._clone_policy = policy_list
     def get_clone_policy(self):
diff --git a/virtinst/progress.py b/virtinst/progress.py
index e9a243b1..d73d4292 100644
--- a/virtinst/progress.py
+++ b/virtinst/progress.py
@@ -482,7 +482,7 @@ def format_number(number, SI=0, space=' '):
         depth  = depth + 1
         number = number / step
 
-    if type(number) == type(1) or type(number) == type(long(1)):
+    if isinstance(number, int) or isinstance(number, long):
         # it's an int or a long, which means it didn't get divided,
         # which means it's already short enough
         format = '%i%s%s'
diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py
index 2dc7a726..c57c9e10 100644
--- a/virtinst/urlfetcher.py
+++ b/virtinst/urlfetcher.py
@@ -1351,7 +1351,7 @@ class ALTLinuxDistro(Distro):
 def _build_distro_list():
     allstores = []
     for obj in globals().values():
-        if type(obj) is type and issubclass(obj, Distro) and obj.name:
+        if isinstance(obj, type) and issubclass(obj, Distro) and obj.name:
             allstores.append(obj)
 
     seen_urldistro = []
diff --git a/virtinst/util.py b/virtinst/util.py
index 495a0841..2a7bc4d3 100644
--- a/virtinst/util.py
+++ b/virtinst/util.py
@@ -30,7 +30,7 @@ import libvirt
 def listify(l):
     if l is None:
         return []
-    elif type(l) != list:
+    elif not isinstance(l, list):
         return [l]
     else:
         return l
@@ -61,7 +61,7 @@ def libvirt_collision(collision_cb, val):
 
 
 def validate_uuid(val):
-    if type(val) is not str:
+    if not isinstance(val, str):
         raise ValueError(_("UUID must be a string."))
 
     form = re.match("[a-fA-F0-9]{8}[-]([a-fA-F0-9]{4}[-]){3}[a-fA-F0-9]{12}$",
@@ -99,7 +99,7 @@ def validate_macaddr(val):
     if val is None:
         return
 
-    if type(val) is not str:
+    if not isinstance(val, str):
         raise ValueError(_("MAC address must be a string."))
 
     form = re.match("^([0-9a-fA-F]{1,2}:){5}[0-9a-fA-F]{1,2}$", val)
diff --git a/virtinst/xmlbuilder.py b/virtinst/xmlbuilder.py
index 9e234e9f..550fea86 100644
--- a/virtinst/xmlbuilder.py
+++ b/virtinst/xmlbuilder.py
@@ -886,7 +886,7 @@ class XMLBuilder(object):
         # XMLChildProperty stores a list in propstore, which dict shallow
         # copy won't fix for us.
         for name, value in ret._propstore.items():
-            if type(value) is not list:
+            if not isinstance(value, list):
                 continue
             ret._propstore[name] = [obj.copy() for obj in ret._propstore[name]]
 
++++++ 69c84bea-import-reduce-from-functools-module.patch ++++++
Subject: Import reduce() from functools module
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:59 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: 69c84bea474c3563975c1f2bfe160a436def020a

The built-in function reduce() [1] has been moved in the functools
module [2] [3].

[1] https://docs.python.org/2/library/functions.html#reduce
[2] https://docs.python.org/3/library/functools.html#functools.reduce
[3] https://docs.python.org/2/library/functools.html#functools.reduce

diff --git a/virtManager/host.py b/virtManager/host.py
index 560bc0a6..2f22642b 100644
--- a/virtManager/host.py
+++ b/virtManager/host.py
@@ -18,6 +18,7 @@
 # MA 02110-1301 USA.
 #
 
+import functools
 import logging
 
 from gi.repository import GObject
@@ -931,7 +932,7 @@ class vmmHost(vmmGObjectUI):
 
             addrstr = "-"
             if ipv6[2]:
-                addrstr = reduce(lambda x, y: x + "\n" + y, ipv6[2])
+                addrstr = functools.reduce(lambda x, y: x + "\n" + y, ipv6[2])
 
             self.widget("interface-ipv6-mode").set_text(mode)
             self.widget("interface-ipv6-address").set_text(addrstr)
diff --git a/virtManager/sshtunnels.py b/virtManager/sshtunnels.py
index 7f825b86..b00b1889 100644
--- a/virtManager/sshtunnels.py
+++ b/virtManager/sshtunnels.py
@@ -17,6 +17,7 @@
 # MA 02110-1301 USA.
 #
 
+import functools
 import logging
 import os
 import Queue
@@ -261,7 +262,7 @@ def _make_ssh_command(ginfo):
     argv.append("sh -c")
     argv.append("'%s'" % nc_cmd)
 
-    argv_str = reduce(lambda x, y: x + " " + y, argv[1:])
+    argv_str = functools.reduce(lambda x, y: x + " " + y, argv[1:])
     logging.debug("Pre-generated ssh command for ginfo: %s", argv_str)
     return argv
 
++++++ 
6e6f59e7-diskbackend-get-a-proper-size-of-existing-block-device-while-cloning.patch
 ++++++
Subject: diskbackend: get a proper size of existing block device while cloning
From: Pavel Hrdina phrd...@redhat.com Tue Oct 3 16:59:13 2017 +0200
Date: Thu Oct 19 09:12:05 2017 +0200:
Git: 6e6f59e7abfd85b2a53554b7d091e553585e85c8

We cannot use os.statvfs() if the clone disk is a block device because
it gets stats about filesystem which in this case is "devtmpfs" mounted
as "/dev".

As a workaround we can seek to the end of the block device to get
the actual size.

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1450908

Signed-off-by: Pavel Hrdina <phrd...@redhat.com>

diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
index de745f4d..a08a23e5 100644
--- a/virtinst/diskbackend.py
+++ b/virtinst/diskbackend.py
@@ -387,8 +387,11 @@ class CloneStorageCreator(_StorageCreator):
     def is_size_conflict(self):
         ret = False
         msg = None
-        vfs = os.statvfs(os.path.dirname(self._path))
-        avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
+        if self.get_dev_type() == "block":
+            avail = _stat_disk(self._path)[1]
+        else:
+            vfs = os.statvfs(os.path.dirname(self._path))
+            avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
         need = long(self._size * 1024 * 1024 * 1024)
         if need > avail:
             if self._sparse:
++++++ 73de8285-systray-remove-redundant-variable-assignment.patch ++++++
Subject: systray: Remove redundant variable assignment
From: Radostin Stoyanov rstoyan...@gmail.com Thu Oct 26 12:00:06 2017 +0100
Date: Fri Oct 27 10:10:08 2017 +0200:
Git: 73de82852405c85b568f9f6293db60ce8f6a85c6

The explicit assignment of "name" is unnecessary.

diff --git a/virtManager/systray.py b/virtManager/systray.py
index aa62df0a..9011038f 100644
--- a/virtManager/systray.py
+++ b/virtManager/systray.py
@@ -275,7 +275,6 @@ class vmmSystray(vmmGObject):
             return
 
         for i, name in enumerate(vm_names):
-            name = vm_names[i]
             connkey = vm_mappings[name]
             if connkey in self.conn_vm_menuitems[uri]:
                 vm_item = self.conn_vm_menuitems[uri][connkey]
++++++ 75210ed3-replace-StringIO-with-io.patch ++++++
Subject: Replace StringIO with io.(StringIO or BytesIO)
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:50 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: 75210ed37c0c5de569de73e04488808a2521a011

StringIO and cStringIO modules no longer exists in Python 3. [1]
Use either io.StringIO [2] for text or io.BytesIO [3] for bytes.

[1] http://docs.python.org/3.0/whatsnew/3.0.html
[2] https://docs.python.org/3/library/io.html#text-i-o
[3] https://docs.python.org/3/library/io.html#binary-i-o

Index: virt-manager-1.4.3/tests/clitest.py
===================================================================
--- virt-manager-1.4.3.orig/tests/clitest.py
+++ virt-manager-1.4.3/tests/clitest.py
@@ -16,6 +16,7 @@
 # MA 02110-1301 USA.
 
 import atexit
+import io
 import logging
 import os
 import shlex
@@ -23,7 +24,6 @@ import shutil
 import sys
 import traceback
 import unittest
-import StringIO
 
 from virtinst import support
 
@@ -144,7 +144,7 @@ class Command(object):
         oldstdin = sys.stdin
         oldargv = sys.argv
         try:
-            out = StringIO.StringIO()
+            out = io.BytesIO()
             sys.stdout = out
             sys.stderr = out
             sys.argv = self.argv
Index: virt-manager-1.4.3/tests/virtconvtest.py
===================================================================
--- virt-manager-1.4.3.orig/tests/virtconvtest.py
+++ virt-manager-1.4.3/tests/virtconvtest.py
@@ -18,8 +18,8 @@
 from __future__ import print_function
 
 import glob
+import io
 import os
-import StringIO
 import unittest
 
 from virtconv import VirtConverter
@@ -32,7 +32,7 @@ out_dir = base_dir + "libvirt_output"
 
 class TestVirtConv(unittest.TestCase):
     def _convert_helper(self, infile, outfile, in_type, disk_format):
-        outbuf = StringIO.StringIO()
+        outbuf = io.BytesIO()
         def print_cb(msg):
             print(msg, file=outbuf)
 
Index: virt-manager-1.4.3/virtManager/create.py
===================================================================
--- virt-manager-1.4.3.orig/virtManager/create.py
+++ virt-manager-1.4.3/virtManager/create.py
@@ -18,10 +18,10 @@
 # MA 02110-1301 USA.
 #
 
+import io
 import logging
 import pkgutil
 import os
-import cStringIO
 import threading
 import time
 
@@ -2633,7 +2633,7 @@ class vmmCreate(vmmGObjectUI):
                 return True
 
         # Use string buffer to store log messages
-        log_stream = cStringIO.StringIO()
+        log_stream = io.StringIO()
 
         # Get virt-bootstrap logger
         vbLogger = logging.getLogger('virtBootstrap')
Index: virt-manager-1.4.3/virtManager/snapshots.py
===================================================================
--- virt-manager-1.4.3.orig/virtManager/snapshots.py
+++ virt-manager-1.4.3/virtManager/snapshots.py
@@ -20,9 +20,9 @@
 
 import datetime
 import glob
+import io
 import logging
 import os
-import StringIO
 
 from gi.repository import Gdk
 from gi.repository import GdkPixbuf
@@ -394,7 +394,7 @@ class vmmSnapshotPage(vmmGObjectUI):
             flags = 0
             mime = self.vm.get_backend().screenshot(stream, screen, flags)
 
-            ret = StringIO.StringIO()
+            ret = io.StringIO()
             def _write_cb(_stream, data, userdata):
                 ignore = stream
                 ignore = userdata
Index: virt-manager-1.4.3/virtinst/urlfetcher.py
===================================================================
--- virt-manager-1.4.3.orig/virtinst/urlfetcher.py
+++ virt-manager-1.4.3/virtinst/urlfetcher.py
@@ -21,11 +21,11 @@
 
 import ConfigParser
 import ftplib
+import io
 import logging
 import os
 import re
 import stat
-import StringIO
 import subprocess
 import tempfile
 import urllib2
@@ -104,6 +104,8 @@ class _URLFetcher(object):
             buff = urlobj.read(self._block_size)
             if not buff:
                 break
+            if isinstance(fileobj, io.StringIO) and type(buff) is str:
+                buff = unicode(buff)
             fileobj.write(buff)
             total += len(buff)
             self.meter.update(total)
@@ -169,7 +171,7 @@ class _URLFetcher(object):
         """
         Grab the passed filename from self.location and return it as a string
         """
-        fileobj = StringIO.StringIO()
+        fileobj = io.StringIO()
         self._grabURL(filename, fileobj)
         return fileobj.getvalue()
 
++++++ 7f1b4cee-pycodestyle-fix-all-E125-warnings.patch ++++++
Subject: pycodestyle: fix all E125 warnings
From: Chen Hanxiao chenhanx...@gmail.com Wed Sep 20 15:36:27 2017 +0800
Date: Sat Oct 21 23:26:16 2017 +0800:
Git: 7f1b4cee822855f683b8f38f38c6b1483911a5a5

   Fix all E125:
     Continuation line with same indent as next logical line

   Also remove ignore options of E125

Signed-off-by: Chen Hanxiao <chenhanx...@gmail.com>

diff --git a/tests/pycodestyle.cfg b/tests/pycodestyle.cfg
index 4ba9cf60..a2ccb552 100644
--- a/tests/pycodestyle.cfg
+++ b/tests/pycodestyle.cfg
@@ -9,7 +9,6 @@ format = pylint
 # E122: Continuation line missing indentation or outdented
 # E123: Closing bracket does not match indentation of opening
 #       bracket's line
-# E125: Continuation line with same indent as next logical line
 # E126: Continuation line over-indented for hanging indent
 # E127: Continuation line over-indented for visual indent
 # E128: Continuation line under-indented for visual indent
@@ -25,4 +24,4 @@ format = pylint
 # E741: Do not use variables named ‘l’, ‘O’, or ‘I’
 
 
-ignore = E122, E123, E125, E126, E127, E128, E129, E221, E241, E301, E303, 
E305, E306, E402, E501, E741
+ignore = E122, E123, E126, E127, E128, E129, E221, E241, E301, E303, E305, 
E306, E402, E501, E741
diff --git a/virt-xml b/virt-xml
index 59d6c4fe..750498b6 100755
--- a/virt-xml
+++ b/virt-xml
@@ -256,7 +256,7 @@ def setup_device(dev):
 def define_changes(conn, inactive_xmlobj, devs, action, confirm):
     if confirm:
         if not prompt_yes_or_no(
-            _("Define '%s' with the changed XML?") % inactive_xmlobj.name):
+                _("Define '%s' with the changed XML?") % inactive_xmlobj.name):
             return False
 
     if action == "hotplug":
diff --git a/virtManager/connection.py b/virtManager/connection.py
index 0f7e20db..c98fff3d 100644
--- a/virtManager/connection.py
+++ b/virtManager/connection.py
@@ -539,13 +539,13 @@ class vmmConnection(vmmGObject):
             inact = 0
 
             if self.check_support(
-                self._backend.SUPPORT_DOMAIN_XML_INACTIVE, vm):
+                    self._backend.SUPPORT_DOMAIN_XML_INACTIVE, vm):
                 inact = libvirt.VIR_DOMAIN_XML_INACTIVE
             else:
                 logging.debug("Domain XML inactive flag not supported.")
 
             if self.check_support(
-                self._backend.SUPPORT_DOMAIN_XML_SECURE, vm):
+                    self._backend.SUPPORT_DOMAIN_XML_SECURE, vm):
                 inact |= libvirt.VIR_DOMAIN_XML_SECURE
                 act = libvirt.VIR_DOMAIN_XML_SECURE
             else:
@@ -563,7 +563,7 @@ class vmmConnection(vmmGObject):
             inact = 0
 
             if self.check_support(
-                self._backend.SUPPORT_INTERFACE_XML_INACTIVE, iface):
+                    self._backend.SUPPORT_INTERFACE_XML_INACTIVE, iface):
                 inact = libvirt.VIR_INTERFACE_XML_INACTIVE
             else:
                 logging.debug("Interface XML inactive flag not supported.")
diff --git a/virtManager/details.py b/virtManager/details.py
index aeac7fd3..a51f5623 100644
--- a/virtManager/details.py
+++ b/virtManager/details.py
@@ -1129,12 +1129,12 @@ class vmmDetails(vmmGObjectUI):
             return False
 
         if not self.err.chkbox_helper(
-            self.config.get_confirm_unapplied,
-            self.config.set_confirm_unapplied,
-            text1=(_("There are unapplied changes. Would you like to apply "
-                     "them now?")),
-            chktext=_("Don't warn me again."),
-            default=False):
+                self.config.get_confirm_unapplied,
+                self.config.set_confirm_unapplied,
+                text1=(_("There are unapplied changes. Would you like to apply 
"
+                    "them now?")),
+                chktext=_("Don't warn me again."),
+                default=False):
             return False
 
         return not self.config_apply(row=row)
@@ -2275,8 +2275,8 @@ class vmmDetails(vmmGObjectUI):
         logging.debug("Removing device: %s", devobj)
 
         if not self.err.chkbox_helper(self.config.get_confirm_removedev,
-            self.config.set_confirm_removedev,
-            text1=(_("Are you sure you want to remove this device?"))):
+                self.config.set_confirm_removedev,
+                text1=(_("Are you sure you want to remove this device?"))):
             return
 
         # Define the change
diff --git a/virtManager/domain.py b/virtManager/domain.py
index 1b278815..a1f59e38 100644
--- a/virtManager/domain.py
+++ b/virtManager/domain.py
@@ -500,7 +500,7 @@ class vmmDomain(vmmLibvirtObject):
 
     def snapshots_supported(self):
         if not self.conn.check_support(
-            self.conn.SUPPORT_DOMAIN_LIST_SNAPSHOTS, self._backend):
+                self.conn.SUPPORT_DOMAIN_LIST_SNAPSHOTS, self._backend):
             return _("Libvirt connection does not support snapshots.")
 
         if self.list_snapshots():
@@ -644,8 +644,8 @@ class vmmDomain(vmmLibvirtObject):
         self._redefine_xmlobj(xmlobj)
 
     def define_cpu(self, vcpus=_SENTINEL, maxvcpus=_SENTINEL,
-        model=_SENTINEL, sockets=_SENTINEL,
-        cores=_SENTINEL, threads=_SENTINEL):
+            model=_SENTINEL, sockets=_SENTINEL,
+            cores=_SENTINEL, threads=_SENTINEL):
         guest = self._make_xmlobj_to_define()
 
         if vcpus != _SENTINEL:
@@ -675,8 +675,8 @@ class vmmDomain(vmmLibvirtObject):
         self._redefine_xmlobj(guest)
 
     def define_overview(self, machine=_SENTINEL, description=_SENTINEL,
-        title=_SENTINEL, idmap_list=_SENTINEL, loader=_SENTINEL,
-        nvram=_SENTINEL):
+            title=_SENTINEL, idmap_list=_SENTINEL, loader=_SENTINEL,
+            nvram=_SENTINEL):
         guest = self._make_xmlobj_to_define()
         if machine != _SENTINEL:
             guest.os.machine = machine
@@ -720,8 +720,8 @@ class vmmDomain(vmmLibvirtObject):
         self._redefine_xmlobj(guest)
 
     def define_boot(self, boot_order=_SENTINEL, boot_menu=_SENTINEL,
-        kernel=_SENTINEL, initrd=_SENTINEL, dtb=_SENTINEL,
-        kernel_args=_SENTINEL, init=_SENTINEL, initargs=_SENTINEL):
+            kernel=_SENTINEL, initrd=_SENTINEL, dtb=_SENTINEL,
+            kernel_args=_SENTINEL, init=_SENTINEL, initargs=_SENTINEL):
 
         guest = self._make_xmlobj_to_define()
         def _change_boot_order():
@@ -776,10 +776,10 @@ class vmmDomain(vmmLibvirtObject):
     ######################
 
     def define_disk(self, devobj, do_hotplug,
-        path=_SENTINEL, readonly=_SENTINEL, serial=_SENTINEL,
-        shareable=_SENTINEL, removable=_SENTINEL, cache=_SENTINEL,
-        io=_SENTINEL, driver_type=_SENTINEL, bus=_SENTINEL, addrstr=_SENTINEL,
-        sgio=_SENTINEL):
+            path=_SENTINEL, readonly=_SENTINEL, serial=_SENTINEL,
+            shareable=_SENTINEL, removable=_SENTINEL, cache=_SENTINEL,
+            io=_SENTINEL, driver_type=_SENTINEL, bus=_SENTINEL, 
addrstr=_SENTINEL,
+            sgio=_SENTINEL):
         xmlobj = self._make_xmlobj_to_define()
         editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
         if not editdev:
@@ -844,11 +844,11 @@ class vmmDomain(vmmLibvirtObject):
             self._redefine_xmlobj(xmlobj)
 
     def define_network(self, devobj, do_hotplug,
-        ntype=_SENTINEL, source=_SENTINEL,
-        mode=_SENTINEL, model=_SENTINEL, addrstr=_SENTINEL,
-        vtype=_SENTINEL, managerid=_SENTINEL, typeid=_SENTINEL,
-        typeidversion=_SENTINEL, instanceid=_SENTINEL,
-        portgroup=_SENTINEL, macaddr=_SENTINEL):
+            ntype=_SENTINEL, source=_SENTINEL,
+            mode=_SENTINEL, model=_SENTINEL, addrstr=_SENTINEL,
+            vtype=_SENTINEL, managerid=_SENTINEL, typeid=_SENTINEL,
+            typeidversion=_SENTINEL, instanceid=_SENTINEL,
+            portgroup=_SENTINEL, macaddr=_SENTINEL):
         xmlobj = self._make_xmlobj_to_define()
         editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
         if not editdev:
@@ -884,9 +884,9 @@ class vmmDomain(vmmLibvirtObject):
             self._redefine_xmlobj(xmlobj)
 
     def define_graphics(self, devobj, do_hotplug,
-        listen=_SENTINEL, addr=_SENTINEL, port=_SENTINEL, tlsport=_SENTINEL,
-        passwd=_SENTINEL, keymap=_SENTINEL, gtype=_SENTINEL,
-        gl=_SENTINEL, rendernode=_SENTINEL):
+            listen=_SENTINEL, addr=_SENTINEL, port=_SENTINEL, 
tlsport=_SENTINEL,
+            passwd=_SENTINEL, keymap=_SENTINEL, gtype=_SENTINEL,
+            gl=_SENTINEL, rendernode=_SENTINEL):
         xmlobj = self._make_xmlobj_to_define()
         editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
         if not editdev:
@@ -964,7 +964,7 @@ class vmmDomain(vmmLibvirtObject):
             self._redefine_xmlobj(xmlobj)
 
     def define_watchdog(self, devobj, do_hotplug,
-        model=_SENTINEL, action=_SENTINEL):
+            model=_SENTINEL, action=_SENTINEL):
         xmlobj = self._make_xmlobj_to_define()
         editdev = self._lookup_device_to_define(xmlobj, devobj, do_hotplug)
         if not editdev:
@@ -1109,7 +1109,7 @@ class vmmDomain(vmmLibvirtObject):
         self._backend.updateDeviceFlags(xml, flags)
 
     def hotplug(self, vcpus=_SENTINEL, memory=_SENTINEL, maxmem=_SENTINEL,
-        description=_SENTINEL, title=_SENTINEL, device=_SENTINEL):
+            description=_SENTINEL, title=_SENTINEL, device=_SENTINEL):
         if not self.is_active():
             return
 
@@ -1570,7 +1570,7 @@ class vmmDomain(vmmLibvirtObject):
 
 
     def migrate(self, destconn, dest_uri=None,
-        tunnel=False, unsafe=False, temporary=False, meter=None):
+            tunnel=False, unsafe=False, temporary=False, meter=None):
         self._install_abort = True
 
         flags = 0
diff --git a/virtManager/engine.py b/virtManager/engine.py
index 537d1c91..d8f86e38 100644
--- a/virtManager/engine.py
+++ b/virtManager/engine.py
@@ -1075,8 +1075,8 @@ class vmmEngine(vmmGObject):
         vm = conn.get_vm(connkey)
 
         if not src.err.chkbox_helper(self.config.get_confirm_poweroff,
-            self.config.set_confirm_poweroff,
-            text1=_("Are you sure you want to save '%s'?") % vm.get_name()):
+                self.config.set_confirm_poweroff,
+                text1=_("Are you sure you want to save '%s'?") % 
vm.get_name()):
             return
 
         _cancel_cb = None
diff --git a/virtManager/netlist.py b/virtManager/netlist.py
index 0bb17965..bd53af56 100644
--- a/virtManager/netlist.py
+++ b/virtManager/netlist.py
@@ -129,7 +129,7 @@ class vmmNetworkList(vmmGObjectUI):
         return ret
 
     def _build_source_row(self, nettype, source_name,
-        label, is_sensitive, is_running, manual_bridge=False, key=None):
+            label, is_sensitive, is_running, manual_bridge=False, key=None):
         return [nettype, source_name, label,
                 is_sensitive, is_running, manual_bridge,
                 key]
diff --git a/virtManager/viewers.py b/virtManager/viewers.py
index df164f59..07a7435f 100644
--- a/virtManager/viewers.py
+++ b/virtManager/viewers.py
@@ -625,7 +625,7 @@ class SpiceViewer(Viewer):
             self._main_channel_hids.append(hid)
 
         elif (type(channel) == SpiceClientGLib.DisplayChannel and
-            not self._display):
+                not self._display):
             channel_id = channel.get_property("channel-id")
 
             if channel_id != 0:
@@ -640,7 +640,7 @@ class SpiceViewer(Viewer):
 
         elif (type(channel) in [SpiceClientGLib.PlaybackChannel,
                                 SpiceClientGLib.RecordChannel] and
-            not self._audio):
+                                not self._audio):
             self._audio = SpiceClientGLib.Audio.get(self._spice_session, None)
 
     def _agent_connected_cb(self, src, val):
diff --git a/virtManager/vmmenu.py b/virtManager/vmmenu.py
index bb233609..153c8524 100644
--- a/virtManager/vmmenu.py
+++ b/virtManager/vmmenu.py
@@ -96,7 +96,7 @@ class VMShutdownMenu(_VMMenu):
             if name == "reset":
                 child.set_tooltip_text(None)
                 if vm and not vm.conn.check_support(
-                    vm.conn.SUPPORT_CONN_DOMAIN_RESET):
+                        vm.conn.SUPPORT_CONN_DOMAIN_RESET):
                     child.set_tooltip_text(_("Hypervisor does not support "
                         "domain reset."))
                     child.set_sensitive(False)
diff --git a/virtinst/cli.py b/virtinst/cli.py
index 2d1c33e5..cfe5ff07 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -486,8 +486,8 @@ def get_console_cb(guest):
 
     gtype = gdevs[0].type
     if gtype not in ["default",
-        VirtualGraphics.TYPE_VNC,
-        VirtualGraphics.TYPE_SPICE]:
+            VirtualGraphics.TYPE_VNC,
+            VirtualGraphics.TYPE_SPICE]:
         logging.debug("No viewer to launch for graphics type '%s'", gtype)
         return
 
diff --git a/virtinst/devicegraphics.py b/virtinst/devicegraphics.py
index dc6919e9..ffba36d9 100644
--- a/virtinst/devicegraphics.py
+++ b/virtinst/devicegraphics.py
@@ -242,7 +242,7 @@ class VirtualGraphics(VirtualDevice):
         self.socket = None
 
         if self.conn.check_support(
-            self.conn.SUPPORT_CONN_GRAPHICS_LISTEN_NONE):
+                self.conn.SUPPORT_CONN_GRAPHICS_LISTEN_NONE):
             obj = self.add_listen()
             obj.type = "none"
 
diff --git a/virtinst/domcapabilities.py b/virtinst/domcapabilities.py
index 3629afe1..be2281a6 100644
--- a/virtinst/domcapabilities.py
+++ b/virtinst/domcapabilities.py
@@ -81,7 +81,7 @@ class DomainCapabilities(XMLBuilder):
     def build_from_params(conn, emulator, arch, machine, hvtype):
         xml = None
         if conn.check_support(
-            conn.SUPPORT_CONN_DOMAIN_CAPABILITIES):
+                conn.SUPPORT_CONN_DOMAIN_CAPABILITIES):
             try:
                 xml = conn.getDomainCapabilities(emulator, arch,
                     machine, hvtype)
diff --git a/virtinst/guest.py b/virtinst/guest.py
index 143a36f2..eaf83ffc 100644
--- a/virtinst/guest.py
+++ b/virtinst/guest.py
@@ -690,7 +690,7 @@ class Guest(XMLBuilder):
 
         if usb2:
             if not self.conn.check_support(
-                self.conn.SUPPORT_CONN_DEFAULT_USB2):
+                    self.conn.SUPPORT_CONN_DEFAULT_USB2):
                 return
             for dev in VirtualController.get_usb2_controllers(self.conn):
                 self.add_device(dev)
@@ -830,7 +830,7 @@ class Guest(XMLBuilder):
         if not self.os.is_x86():
             return
         if not self.conn.check_support(
-            self.conn.SUPPORT_CONN_ADVANCED_CLOCK):
+                self.conn.SUPPORT_CONN_ADVANCED_CLOCK):
             return
 
         # Set clock policy that maps to qemu options:
diff --git a/virtinst/osdict.py b/virtinst/osdict.py
index 429f8005..c173554b 100644
--- a/virtinst/osdict.py
+++ b/virtinst/osdict.py
@@ -300,7 +300,7 @@ class _OsVariant(object):
     ########################
 
     def _is_related_to(self, related_os_list, os=None,
-        check_derives=True, check_upgrades=True, check_clones=True):
+            check_derives=True, check_upgrades=True, check_clones=True):
         os = os or self._os
         if not os:
             return False
diff --git a/virtinst/pollhelpers.py b/virtinst/pollhelpers.py
index fd156bb9..64cdb32c 100644
--- a/virtinst/pollhelpers.py
+++ b/virtinst/pollhelpers.py
@@ -115,7 +115,7 @@ def fetch_nets(backend, origmap, build_func):
     name = "network"
 
     if backend.check_support(
-        backend.SUPPORT_CONN_LISTALLNETWORKS) and not FORCE_OLD_POLL:
+            backend.SUPPORT_CONN_LISTALLNETWORKS) and not FORCE_OLD_POLL:
         return _new_poll_helper(origmap, name,
                                 backend.listAllNetworks, build_func)
     else:
@@ -132,7 +132,7 @@ def fetch_pools(backend, origmap, build_func):
     name = "pool"
 
     if backend.check_support(
-        backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not FORCE_OLD_POLL:
+            backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not FORCE_OLD_POLL:
         return _new_poll_helper(origmap, name,
                                 backend.listAllStoragePools, build_func)
     else:
@@ -149,7 +149,7 @@ def fetch_volumes(backend, pool, origmap, build_func):
     name = "volume"
 
     if backend.check_support(
-        backend.SUPPORT_POOL_LISTALLVOLUMES, pool) and not FORCE_OLD_POLL:
+            backend.SUPPORT_POOL_LISTALLVOLUMES, pool) and not FORCE_OLD_POLL:
         return _new_poll_helper(origmap, name,
                                 pool.listAllVolumes, build_func)
     else:
@@ -166,7 +166,7 @@ def fetch_interfaces(backend, origmap, build_func):
     name = "interface"
 
     if backend.check_support(
-        backend.SUPPORT_CONN_LISTALLINTERFACES) and not FORCE_OLD_POLL:
+            backend.SUPPORT_CONN_LISTALLINTERFACES) and not FORCE_OLD_POLL:
         return _new_poll_helper(origmap, name,
                                 backend.listAllInterfaces, build_func)
     else:
@@ -182,7 +182,7 @@ def fetch_interfaces(backend, origmap, build_func):
 def fetch_nodedevs(backend, origmap, build_func):
     name = "nodedev"
     if backend.check_support(
-        backend.SUPPORT_CONN_LISTALLDEVICES) and not FORCE_OLD_POLL:
+            backend.SUPPORT_CONN_LISTALLDEVICES) and not FORCE_OLD_POLL:
         return _new_poll_helper(origmap, name,
                                 backend.listAllDevices, build_func)
     else:
@@ -278,7 +278,7 @@ def _old_fetch_vms(backend, origmap, build_func):
 def fetch_vms(backend, origmap, build_func):
     name = "domain"
     if backend.check_support(
-        backend.SUPPORT_CONN_LISTALLDOMAINS):
+            backend.SUPPORT_CONN_LISTALLDOMAINS):
         return _new_poll_helper(origmap, name,
                                 backend.listAllDomains, build_func)
     else:
diff --git a/virtinst/storage.py b/virtinst/storage.py
index 3f1bd9f5..254e7ff6 100644
--- a/virtinst/storage.py
+++ b/virtinst/storage.py
@@ -375,8 +375,8 @@ class StoragePool(_StorageObject):
         elif self.type == StoragePool.TYPE_GLUSTER:
             srcname = "gv0"
         elif ("target_path" in self._propstore and
-            self.target_path and
-            self.target_path.startswith(_DEFAULT_LVM_TARGET_BASE)):
+                self.target_path and
+                self.target_path.startswith(_DEFAULT_LVM_TARGET_BASE)):
             # If there is a target path, parse it for an expected VG
             # location, and pull the name from there
             vg = self.target_path[len(_DEFAULT_LVM_TARGET_BASE):]
@@ -642,7 +642,7 @@ class StorageVolume(_StorageObject):
             raise ValueError(_("input_vol must be a virStorageVol"))
 
         if not self.conn.check_support(
-            self.conn.SUPPORT_POOL_CREATEVOLFROM, self.pool):
+                self.conn.SUPPORT_POOL_CREATEVOLFROM, self.pool):
             raise ValueError(_("Creating storage from an existing volume is"
                                " not supported by this libvirt version."))
 
diff --git a/virtinst/urlfetcher.py b/virtinst/urlfetcher.py
index ebc5c7a4..a45c6383 100644
--- a/virtinst/urlfetcher.py
+++ b/virtinst/urlfetcher.py
@@ -448,7 +448,7 @@ def _distroFromSUSEContent(fetcher, arch, vmtype=None):
     dclass = GenericDistro
     if distribution:
         if re.match(".*SUSE Linux Enterprise Server*", distribution[1]) or \
-            re.match(".*SUSE SLES*", distribution[1]):
+                re.match(".*SUSE SLES*", distribution[1]):
             dclass = SLESDistro
             if distro_version is None:
                 distro_version = _parse_sle_distribution(distribution)
++++++ 91c0669c-cli-Fix-OrderedDict-mutated-during-iteration-on-python3.patch 
++++++
Subject: cli: Fix OrderedDict mutated during iteration on python3
From: Cole Robinson crobi...@redhat.com Fri Oct 20 15:09:01 2017 -0400
Date: Fri Oct 20 16:13:04 2017 -0400:
Git: 91c0669cf621b199ece533ac756bd346900a1474


diff --git a/virtinst/cli.py b/virtinst/cli.py
index 1b86cad5..086aa0e0 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -1482,7 +1482,7 @@ class ParserCPU(VirtCLIParser):
 
     def _parse(self, inst):
         # Convert +feature, -feature into expected format
-        for key, value in self.optdict.items():
+        for key, value in list(self.optdict.items()):
             policy = None
             if value or len(key) == 1:
                 continue
++++++ 9617d126-systray-Use-APPLICATION_STATUS-for-appindicator.patch ++++++
Subject: systray: Use APPLICATION_STATUS for appindicator
From: Cole Robinson crobi...@redhat.com Wed Oct 18 18:50:42 2017 -0400
Date: Wed Oct 18 19:14:17 2017 -0400:
Git: 9617d1267dfb283b6a13762f7c03d391b644db84

Not OTHER, as the reporter points out this shouldn't be used, and
causes issues on KDE

https://bugzilla.redhat.com/show_bug.cgi?id=1501173

diff --git a/virtManager/systray.py b/virtManager/systray.py
index bbe5119c..ff550738 100644
--- a/virtManager/systray.py
+++ b/virtManager/systray.py
@@ -139,7 +139,7 @@ class vmmSystray(vmmGObject):
             # pylint: disable=maybe-no-member
             self.systray_icon = AppIndicator3.Indicator.new("virt-manager",
                                 "virt-manager",
-                                AppIndicator3.IndicatorCategory.OTHER)
+                                
AppIndicator3.IndicatorCategory.APPLICATION_STATUS)
             self.systray_icon.set_status(AppIndicator3.IndicatorStatus.ACTIVE)
             self.systray_icon.set_menu(self.systray_menu)
 
++++++ 999dbb36-cli-Make-VirtCLIArgument-instantiation-less-crazy.patch ++++++
Subject: cli: Make _VirtCLIArgument instantiation less crazy
From: Cole Robinson crobi...@redhat.com Fri Oct 20 16:47:56 2017 -0400
Date: Fri Oct 20 17:07:19 2017 -0400:
Git: 999dbb3665fb1cf7d6466dc53583a020b644e522

Motivation is that the other way had changed behavior with python3
which breaks things

diff --git a/virtinst/cli.py b/virtinst/cli.py
index 086aa0e0..2d1c33e5 100644
--- a/virtinst/cli.py
+++ b/virtinst/cli.py
@@ -805,10 +805,10 @@ def _set_attribute(obj, attr, val):  # pylint: 
disable=unused-argument
     exec("obj." + attr + " = val ")  # pylint: disable=exec-used
 
 
-class _VirtCLIArgument(object):
+class _VirtCLIArgumentStatic(object):
     """
-    A single subargument passed to compound command lines like --disk,
-    --network, etc.
+    Helper class to hold all of the static data we need for knowing
+    how to parse a cli subargument, like --disk path=, or --network mac=.
 
     @attrname: The virtinst API attribute name the cliargument maps to.
         If this is a virtinst object method, it will be called.
@@ -838,66 +838,64 @@ class _VirtCLIArgument(object):
         VirtualDisk has multiple seclabel children, this provides a hook
         to lookup the specified child object.
     """
-    attrname = None
-    cliname = None
-    cb = None
-    can_comma = None
-    ignore_default = False
-    aliases = None
-    is_list = False
-    is_onoff = False
-    lookup_cb = None
-    is_novalue = False
-    find_inst_cb = None
-
-    @staticmethod
-    def make_arg(attrname, cliname, **kwargs):
-        """
-        Generates a new VirtCLIArgument class with the passed static
-        values. Initialize it later with the actual command line and value.
-        kwargs can be any of the
-        """
-        class VirtAddArg(_VirtCLIArgument):
-            pass
-
-        VirtAddArg.attrname = attrname
-        VirtAddArg.cliname = cliname
-        for key, val in kwargs.items():
-            # getattr for validation
-            getattr(VirtAddArg, key)
-            setattr(VirtAddArg, key, val)
-        return VirtAddArg
-
-    @classmethod
-    def match_name(cls, cliname):
+    def __init__(self, attrname, cliname,
+                 cb=None, can_comma=None,
+                 ignore_default=False, aliases=None,
+                 is_list=False, is_onoff=False,
+                 lookup_cb=None, is_novalue=False,
+                 find_inst_cb=None):
+        self.attrname = attrname
+        self.cliname = cliname
+        self.cb = cb
+        self.can_comma = can_comma
+        self.ignore_default = ignore_default
+        self.aliases = aliases
+        self.is_list = is_list
+        self.is_onoff = is_onoff
+        self.lookup_cb = lookup_cb
+        self.is_novalue = is_novalue
+        self.find_inst_cb = find_inst_cb
+
+    def match_name(self, cliname):
         """
         Return True if the passed argument name matches this
         VirtCLIArgument. So for an option like --foo bar=X, this
         checks if we are the parser for 'bar'
         """
-        for argname in [cls.cliname] + util.listify(cls.aliases):
+        for argname in [self.cliname] + util.listify(self.aliases):
             if re.match("^%s$" % argname, cliname):
                 return True
         return False
 
 
-    def __init__(self, key, val):
+class _VirtCLIArgument(object):
+    """
+    A class that combines the static parsing data _VirtCLIArgumentStatic
+    with actual values passed on the command line.
+    """
+
+    def __init__(self, virtarg, key, val):
         """
         Instantiate a VirtCLIArgument with the actual key=val pair
         from the command line.
         """
         # Sanitize the value
         if val is None:
-            if not self.is_novalue:
+            if not virtarg.is_novalue:
                 raise RuntimeError("Option '%s' had no value set." % key)
             val = ""
         if val == "":
             val = None
-        if self.is_onoff:
+        if virtarg.is_onoff:
             val = _on_off_convert(key, val)
 
         self.val = val
         self.key = key
+        self._virtarg = virtarg
+
+        # For convenience
+        self.attrname = virtarg.attrname
+        self.cliname = virtarg.cliname
 
     def parse_param(self, parser, inst, support_cb):
         """
@@ -909,12 +907,12 @@ class _VirtCLIArgument(object):
         """
         if support_cb:
             support_cb(inst, self)
-        if self.val == "default" and self.ignore_default:
+        if self.val == "default" and self._virtarg.ignore_default:
             return
 
-        if self.find_inst_cb:
-            inst = self.find_inst_cb(parser,  # pylint: disable=not-callable
-                                     inst, self.val, self, True)
+        if self._virtarg.find_inst_cb:
+            inst = self._virtarg.find_inst_cb(parser,
+                                              inst, self.val, self, True)
 
         try:
             if self.attrname:
@@ -923,9 +921,8 @@ class _VirtCLIArgument(object):
             raise RuntimeError("programming error: obj=%s does not have "
                                "member=%s" % (inst, self.attrname))
 
-        if self.cb:
-            self.cb(parser, inst,  # pylint: disable=not-callable
-                    self.val, self)
+        if self._virtarg.cb:
+            self._virtarg.cb(parser, inst, self.val, self)
         else:
             _set_attribute(inst, self.attrname, self.val)
 
@@ -938,22 +935,22 @@ class _VirtCLIArgument(object):
         instantiated with key=device val=floppy, so return
         'inst.device == floppy'
         """
-        if not self.attrname and not self.lookup_cb:
+        if not self.attrname and not self._virtarg.lookup_cb:
             raise RuntimeError(
                 _("Don't know how to match device type '%(device_type)s' "
                   "property '%(property_name)s'") %
                 {"device_type": getattr(inst, "virtual_device_type", ""),
                  "property_name": self.key})
 
-        if self.find_inst_cb:
-            inst = self.find_inst_cb(parser,  # pylint: disable=not-callable
-                                     inst, self.val, self, False)
+        if self._virtarg.find_inst_cb:
+            inst = self._virtarg.find_inst_cb(parser,
+                                              inst, self.val, self, False)
             if not inst:
                 return False
 
-        if self.lookup_cb:
-            return self.lookup_cb(parser,  # pylint: disable=not-callable
-                                  inst, self.val, self)
+        if self._virtarg.lookup_cb:
+            return self._virtarg.lookup_cb(parser,
+                                           inst, self.val, self)
         else:
             return eval(  # pylint: disable=eval-used
                 "inst." + self.attrname) == self.val
@@ -1095,9 +1092,9 @@ class VirtCLIParser(object):
         Add a VirtCLIArgument for this class.
         """
         if not cls._virtargs:
-            cls._virtargs = [_VirtCLIArgument.make_arg(
+            cls._virtargs = [_VirtCLIArgumentStatic(
                 None, "clearxml", cb=cls._clearxml_cb, is_onoff=True)]
-        cls._virtargs.append(_VirtCLIArgument.make_arg(*args, **kwargs))
+        cls._virtargs.append(_VirtCLIArgumentStatic(*args, **kwargs))
 
     @classmethod
     def print_introspection(cls):
@@ -1147,10 +1144,12 @@ class VirtCLIParser(object):
         VirtCLIArguments to actually interact with
         """
         ret = []
-        for param in self._virtargs:
-            for key in optdict.keys():
-                if param.match_name(key):
-                    ret.append(param(key, optdict.pop(key)))
+        for virtargstatic in self._virtargs:
+            for key in list(optdict.keys()):
+                if virtargstatic.match_name(key):
+                    arginst = _VirtCLIArgument(virtargstatic,
+                                               key, optdict.pop(key))
+                    ret.append(arginst)
         return ret
 
     def _check_leftover_opts(self, optdict):
++++++ 9a9f9ecd-ignore-comments-in-keymap-conf-files.patch ++++++
Subject: virtinst: ignore comments in keymap conf files
From: Jim Fehlig jfeh...@suse.com Wed Oct 11 15:13:26 2017 -0600
Date: Wed Oct 18 17:46:41 2017 -0400:
Git: 9a9f9ecd2c1f03665809009ad6cfde937b09adaa

On a host system with keyboard configured to en-US, it was noticed
that virt-install created install XML with keymap='de'. The host
system did not have /etc/vconsole.conf, so /etc/sysconfig/keyboard
was the next file to check, which contained the following

KEYTABLE=""

Currently the parsing code does not ignore comments and incorrectly
parsed a 'de' keymap. Fix by ignoring any lines that start with '#'
after trimming whitespace.

diff --git a/virtinst/hostkeymap.py b/virtinst/hostkeymap.py
index 71503730..87a80ef6 100644
--- a/virtinst/hostkeymap.py
+++ b/virtinst/hostkeymap.py
@@ -71,6 +71,9 @@ def _sysconfig_keyboard(f):
         s = f.readline()
         if s == "":
             break
+        s = s.strip()
+        if s.startswith("#"):
+            continue
         if (re.search("KEYMAP", s) is not None or
             re.search("KEYTABLE", s) is not None or
            (re.search("KEYBOARD", s) is not None and
++++++ a2bcd6c4-dont-compare-between-None-and-int.patch ++++++
Subject: Do not compare between None and int
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:54 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: a2bcd6c43a77b03693d11d231e8c0a7b0609889b

In Python 2 comparison between int and None is allowed but in
Pyhton 3 it is not.

Example:

Pyhton 2

    >>> None > 0
    False

Python 3

    >>> None > 0
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: '>' not supported between instances of 'NoneType' and 'int'

diff --git a/tests/utils.py b/tests/utils.py
index 7397d369..e9072bf4 100644
--- a/tests/utils.py
+++ b/tests/utils.py
@@ -181,7 +181,7 @@ def diff_compare(actual_out, filename=None, 
expect_out=None):
 
     diff = "".join(difflib.unified_diff(expect_out.splitlines(1),
                                         actual_out.splitlines(1),
-                                        fromfile=filename,
+                                        fromfile=filename or '',
                                         tofile="Generated Output"))
     if diff:
         raise AssertionError("Conversion outputs did not match.\n%s" % diff)
diff --git a/virtinst/support.py b/virtinst/support.py
index 19160fba..6b0489a5 100644
--- a/virtinst/support.py
+++ b/virtinst/support.py
@@ -187,7 +187,8 @@ class _SupportCheck(object):
         actual_hv_version = conn.conn_version()
 
         # Check that local libvirt version is sufficient
-        if _version_str_to_int(self.version) > actual_libvirt_version:
+        v = _version_str_to_int(self.version)
+        if v and (v > actual_libvirt_version):
             return False
 
         if self.hv_version:
++++++ b8fa0c6b-xmlnsqemu-order-XML-output-like-libvirt-does.patch ++++++
Subject: xmlnsqemu: Order XML output like libvirt does
From: Cole Robinson crobi...@redhat.com Fri Oct 20 15:26:03 2017 -0400
Date: Fri Oct 20 16:13:04 2017 -0400:
Git: b8fa0c6b6769663837079084b6ff93da243d52a1

args before env

diff --git a/tests/cli-test-xml/compare/virt-install-many-devices.xml 
b/tests/cli-test-xml/compare/virt-install-many-devices.xml
index 87855238..2873a65b 100644
--- a/tests/cli-test-xml/compare/virt-install-many-devices.xml
+++ b/tests/cli-test-xml/compare/virt-install-many-devices.xml
@@ -386,12 +386,12 @@
     </panic>
   </devices>
   <qemu:commandline>
-    <qemu:env name="DISPLAY" value=":0.1"/>
     <qemu:arg value="-display"/>
     <qemu:arg value="gtk,gl=on"/>
     <qemu:arg value="-device"/>
     <qemu:arg 
value="vfio-pci,addr=05.0,sysfsdev=/sys/class/mdev_bus/0000:00:02.0/f321853c-c584-4a6b-b99a-3eee22a3919c"/>
     <qemu:arg value="-set"/>
     <qemu:arg value="device.video0.driver=virtio-vga"/>
+    <qemu:env name="DISPLAY" value=":0.1"/>
   </qemu:commandline>
 </domain>
diff --git a/virtinst/xmlnsqemu.py b/virtinst/xmlnsqemu.py
index 28259bf2..5213e5d1 100644
--- a/virtinst/xmlnsqemu.py
+++ b/virtinst/xmlnsqemu.py
@@ -37,6 +37,7 @@ class XMLNSQemu(XMLBuilder):
     Class for generating <qemu:commandline> XML
     """
     _XML_ROOT_NAME = "qemu:commandline"
+    _XML_PROP_ORDER = ["args", "envs"]
 
     args = XMLChildProperty(_XMLNSQemuArg)
     def add_arg(self, value):
++++++ bc3c9a9d-progress-remove-unused-import.patch ++++++
Subject: progress: Remove unused import
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:43 2017 +0100
Date: Fri Oct 20 11:49:14 2017 -0400:
Git: bc3c9a9d7b0b2afcccac69182e771bf3a3eacae0


diff --git a/virtinst/progress.py b/virtinst/progress.py
index d73d4292..05114ed4 100644
--- a/virtinst/progress.py
+++ b/virtinst/progress.py
@@ -27,7 +27,6 @@
 import sys
 import time
 import math
-import thread
 import fcntl
 import struct
 import termios
++++++ d1e1cf64-progress-remove-trailing-white-space.patch ++++++
Subject: progress: Remove trailing white space
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:40 2017 +0100
Date: Fri Oct 20 11:49:12 2017 -0400:
Git: d1e1cf64a7c248f586308d8c89ea51855a9a0451


diff --git a/virtinst/progress.py b/virtinst/progress.py
index a27108b1..e9a243b1 100644
--- a/virtinst/progress.py
+++ b/virtinst/progress.py
@@ -9,9 +9,9 @@
 #   Lesser General Public License for more details.
 #
 #   You should have received a copy of the GNU Lesser General Public
-#   License along with this library; if not, write to the 
-#      Free Software Foundation, Inc., 
-#      59 Temple Place, Suite 330, 
+#   License along with this library; if not, write to the
+#      Free Software Foundation, Inc.,
+#      59 Temple Place, Suite 330,
 #      Boston, MA  02111-1307  USA
 
 # This file is part of urlgrabber, a high-level cross-protocol url-grabber
@@ -113,7 +113,7 @@ class BaseMeter:
         self.last_amount_read = 0
         self.last_update_time = None
         self.re = RateEstimator()
-        
+
     def start(self, filename=None, url=None, basename=None,
               size=None, now=None, text=None):
         self.filename = filename
@@ -131,7 +131,7 @@ class BaseMeter:
         self.last_amount_read = 0
         self.last_update_time = now
         self._do_start(now)
-        
+
     def _do_start(self, now=None):
         pass
 
@@ -158,7 +158,7 @@ class BaseMeter:
 
     def _do_end(self, amount_read, now=None):
         pass
-        
+
 #  This is kind of a hack, but progress is gotten from grabber which doesn't
 # know about the total size to download. So we do this so we can get the data
 # out of band here. This will be "fixed" one way or anther soon.
@@ -173,7 +173,7 @@ def text_meter_total_size(size, downloaded=0):
 #
 #       update: No size (minimal: 17 chars)
 #       -----------------------------------
-# <text>                          <rate> | <current size> <elapsed time> 
+# <text>                          <rate> | <current size> <elapsed time>
 #  8-48                          1    8  3             6 1            9 5
 #
 # Order: 1. <text>+<current size> (17)
@@ -208,7 +208,7 @@ def text_meter_total_size(size, downloaded=0):
 #
 #       end
 #       ---
-# <text>                                 | <current size> <elapsed time> 
+# <text>                                 | <current size> <elapsed time>
 #  8-56                                  3             6 1            9 5
 #
 # Order: 1. <text>                ( 8)
@@ -341,7 +341,7 @@ class RateEstimator:
         self.last_update_time = now
         self.last_amount_read = 0
         self.ave_rate = None
-        
+
     def update(self, amount_read, now=None):
         if now is None: now = time.time()
         # libcurl calls the progress callback when fetching headers
@@ -365,7 +365,7 @@ class RateEstimator:
                 time_diff, read_diff, self.ave_rate, self.timescale)
         self.last_amount_read = amount_read
         #print 'results', time_diff, read_diff, self.ave_rate
-        
+
     #####################################################################
     # result methods
     def average_rate(self):
@@ -401,14 +401,14 @@ class RateEstimator:
         epsilon = time_diff / timescale
         if epsilon > 1: epsilon = 1.0
         return self._rolling_ave(time_diff, read_diff, last_ave, epsilon)
-    
+
     def _rolling_ave(self, time_diff, read_diff, last_ave, epsilon):
         """perform a "rolling average" iteration
         a rolling average "folds" new data into an existing average with
         some weight, epsilon.  epsilon must be between 0.0 and 1.0 (inclusive)
         a value of 0.0 means only the old value (initial value) counts,
         and a value of 1.0 means only the newest value is considered."""
-        
+
         try:
             recent_rate = read_diff / time_diff
         except ZeroDivisionError:
@@ -437,7 +437,7 @@ class RateEstimator:
         rt = int(rt)
         if shift <= 0: return rt
         return float(int(rt) >> shift << shift)
-        
+
 
 def format_time(seconds, use_hours=0):
     if seconds is None or seconds < 0:
@@ -455,7 +455,7 @@ def format_time(seconds, use_hours=0):
             return '%02i:%02i:%02i' % (hours, minutes, seconds)
         else:
             return '%02i:%02i' % (minutes, seconds)
-            
+
 def format_number(number, SI=0, space=' '):
     """Turn numbers into human-readable metric-like numbers"""
     symbols = ['',  # (none)
@@ -467,14 +467,14 @@ def format_number(number, SI=0, space=' '):
                'E', # exa
                'Z', # zetta
                'Y'] # yotta
-    
+
     if SI: step = 1000.0
     else: step = 1024.0
 
     thresh = 999
     depth = 0
     max_depth = len(symbols) - 1
-    
+
     # we want numbers between 0 and thresh, but don't exceed the length
     # of our list.  In that event, the formatting will be screwed up,
     # but it'll still show the right number.
@@ -492,5 +492,5 @@ def format_number(number, SI=0, space=' '):
         format = '%.1f%s%s'
     else:
         format = '%.0f%s%s'
-        
+
     return(format % (float(number or 0), space, symbols[depth]))
++++++ d2648d81-virtconv-dont-implicitly-depend-on-dict-hash-order.patch ++++++
Subject: virtconv: Don't implicitly depend on dict hash order
From: Cole Robinson crobi...@redhat.com Fri Oct 20 16:06:48 2017 -0400
Date: Fri Oct 20 16:13:04 2017 -0400:
Git: d2648d81cc8a9c1ddb7e19b8fe44edaf53ad67ab


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 4cad0203..60055b7d 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_test-vmx-zip.libvirt
@@ -6,7 +6,6 @@
   <vcpu>1</vcpu>
   <os>
     <type arch="x86_64">hvm</type>
-    <boot dev="cdrom"/>
     <boot dev="hd"/>
   </os>
   <features>
@@ -28,15 +27,15 @@
   </pm>
   <devices>
     <emulator>/usr/bin/qemu-kvm</emulator>
-    <disk type="file" device="cdrom">
-      <driver type="raw"/>
-      <target dev="hda" bus="ide"/>
-      <readonly/>
-    </disk>
     <disk type="file" device="disk">
       <driver name="qemu"/>
       <source file="/var/lib/libvirt/images/MS-DOS"/>
+      <target dev="hda" bus="ide"/>
+    </disk>
+    <disk type="file" device="cdrom">
+      <driver type="raw"/>
       <target dev="hdb" bus="ide"/>
+      <readonly/>
     </disk>
     <controller type="usb" index="0" model="ich9-ehci1"/>
     <controller type="usb" index="0" model="ich9-uhci1">
diff --git a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt 
b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
index 803a7424..e72a7184 100644
--- a/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
+++ b/tests/virtconv-files/libvirt_output/vmx2libvirt_vmx-dir.libvirt
@@ -6,7 +6,6 @@
   <vcpu>2</vcpu>
   <os>
     <type arch="x86_64">hvm</type>
-    <boot dev="cdrom"/>
     <boot dev="hd"/>
   </os>
   <features>
@@ -28,15 +27,15 @@
   </pm>
   <devices>
     <emulator>/usr/bin/qemu-kvm</emulator>
-    <disk type="file" device="cdrom">
-      <target dev="hda" bus="ide"/>
-      <readonly/>
-    </disk>
     <disk type="file" device="disk">
       <driver name="qemu"/>
       <source file="/var/lib/libvirt/images/ESX4.0-rhel4u8-32b-flat"/>
       <target dev="sda" bus="scsi"/>
     </disk>
+    <disk type="file" device="cdrom">
+      <target dev="hda" bus="ide"/>
+      <readonly/>
+    </disk>
     <controller type="usb" index="0" model="ich9-ehci1"/>
     <controller type="usb" index="0" model="ich9-uhci1">
       <master startport="0"/>
diff --git a/virtconv/vmx.py b/virtconv/vmx.py
index fc6a5264..3be19e5c 100644
--- a/virtconv/vmx.py
+++ b/virtconv/vmx.py
@@ -19,6 +19,7 @@
 # MA 02110-1301 USA.
 #
 
+import collections
 import logging
 import os
 import re
@@ -88,7 +89,7 @@ class _VMXFile(object):
                     (len(self.lines) + 1, line.strip(), e))
 
     def pairs(self):
-        ret = {}
+        ret = collections.OrderedDict()
         for line in self.lines:
             if line.pair:
                 ret[line.pair[0]] = line.pair[1]
++++++ d82022bd-manager-drop-python2-only-cmp-usage.patch ++++++
Subject: manager: Drop python2 only cmp() usage
From: Cole Robinson crobi...@redhat.com Sat Oct 21 19:18:02 2017 -0400
Date: Sat Oct 21 19:41:33 2017 -0400:
Git: d82022bd2cc805f11eaea3dc8b506678b3fdb3d5

Manually implement it

diff --git a/virtManager/manager.py b/virtManager/manager.py
index 73fe6ea7..c257af28 100644
--- a/virtManager/manager.py
+++ b/virtManager/manager.py
@@ -66,6 +66,10 @@ def _style_get_prop(widget, propname):
     return value.get_int()
 
 
+def _cmp(a, b):
+    return ((a > b) - (a < b))
+
+
 def _get_inspection_icon_pixbuf(vm, w, h):
     # libguestfs gives us the PNG data as a string.
     png_data = vm.inspection.icon
@@ -911,40 +915,40 @@ class vmmManager(vmmGObjectUI):
     def vmlist_name_sorter(self, model, iter1, iter2, ignore):
         key1 = str(model[iter1][ROW_SORT_KEY]).lower()
         key2 = str(model[iter2][ROW_SORT_KEY]).lower()
-        return cmp(key1, key2)
+        return _cmp(key1, key2)
 
     def vmlist_guest_cpu_usage_sorter(self, model, iter1, iter2, ignore):
         obj1 = model[iter1][ROW_HANDLE]
         obj2 = model[iter2][ROW_HANDLE]
 
-        return cmp(obj1.guest_cpu_time_percentage(),
+        return _cmp(obj1.guest_cpu_time_percentage(),
                    obj2.guest_cpu_time_percentage())
 
     def vmlist_host_cpu_usage_sorter(self, model, iter1, iter2, ignore):
         obj1 = model[iter1][ROW_HANDLE]
         obj2 = model[iter2][ROW_HANDLE]
 
-        return cmp(obj1.host_cpu_time_percentage(),
+        return _cmp(obj1.host_cpu_time_percentage(),
                    obj2.host_cpu_time_percentage())
 
     def vmlist_memory_usage_sorter(self, model, iter1, iter2, ignore):
         obj1 = model[iter1][ROW_HANDLE]
         obj2 = model[iter2][ROW_HANDLE]
 
-        return cmp(obj1.stats_memory(),
+        return _cmp(obj1.stats_memory(),
                    obj2.stats_memory())
 
     def vmlist_disk_io_sorter(self, model, iter1, iter2, ignore):
         obj1 = model[iter1][ROW_HANDLE]
         obj2 = model[iter2][ROW_HANDLE]
 
-        return cmp(obj1.disk_io_rate(), obj2.disk_io_rate())
+        return _cmp(obj1.disk_io_rate(), obj2.disk_io_rate())
 
     def vmlist_network_usage_sorter(self, model, iter1, iter2, ignore):
         obj1 = model[iter1][ROW_HANDLE]
         obj2 = model[iter2][ROW_HANDLE]
 
-        return cmp(obj1.network_traffic_rate(), obj2.network_traffic_rate())
+        return _cmp(obj1.network_traffic_rate(), obj2.network_traffic_rate())
 
     def enable_polling(self, column):
         # pylint: disable=redefined-variable-type
++++++ dff00d4f-remove-deprecated-statvfs-module.patch ++++++
Subject: Remove deprecated statvfs module
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:47 2017 +0100
Date: Fri Oct 20 11:49:14 2017 -0400:
Git: dff00d4fc02aa88036d0c7aa13324276fe08f14f

The statvfs module has been removed in Python 3. [1]
It is replaced by os.statvfs which is also available in Pyhton 2.

[1] https://docs.python.org/2/library/statvfs.html#module-statvfs
[2] https://docs.python.org/3/library/os.html#os.statvfs

diff --git a/virtManager/addstorage.py b/virtManager/addstorage.py
index cdfd78e1..c137e2b3 100644
--- a/virtManager/addstorage.py
+++ b/virtManager/addstorage.py
@@ -19,7 +19,6 @@
 
 import logging
 import os
-import statvfs
 
 from gi.repository import GObject
 from gi.repository import Gtk
@@ -81,7 +80,7 @@ class vmmAddStorage(vmmGObjectUI):
 
         elif not self.conn.is_remote() and os.path.exists(path):
             vfs = os.statvfs(os.path.dirname(path))
-            avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
+            avail = vfs.f_frsize * vfs.f_bavail
 
         return float(avail / 1024.0 / 1024.0 / 1024.0)
 
diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
index a08a23e5..636aa51f 100644
--- a/virtinst/diskbackend.py
+++ b/virtinst/diskbackend.py
@@ -22,7 +22,6 @@ import logging
 import os
 import re
 import stat
-import statvfs
 
 import libvirt
 
@@ -391,7 +390,7 @@ class CloneStorageCreator(_StorageCreator):
             avail = _stat_disk(self._path)[1]
         else:
             vfs = os.statvfs(os.path.dirname(self._path))
-            avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
+            avail = vfs.f_frsize * vfs.f_bavail
         need = long(self._size * 1024 * 1024 * 1024)
         if need > avail:
             if self._sparse:
++++++ e2ad4b2f-convert-iteritems-to-items.patch ++++++
Subject: Convert iteritems() to items()
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:35:45 2017 +0100
Date: Fri Oct 20 11:49:14 2017 -0400:
Git: e2ad4b2fded8cb3ad23cd62b0c9d08767656ea83

In Python 2 iteritems() [1] returns an iterator over the dictionary and
items() [2] returns a list of pairs.

In Python 3 iteritems() does not exist and items() returns a view of
the dictionary's items.[3]

[1] https://docs.python.org/2/library/stdtypes.html#dict.iteritems
[2] https://docs.python.org/2/library/stdtypes.html#dict.items
[3] https://docs.python.org/3/library/stdtypes.html#dict.items

diff --git a/virtManager/create.py b/virtManager/create.py
index 1fbc65ef..8b4d75d5 100644
--- a/virtManager/create.py
+++ b/virtManager/create.py
@@ -2499,7 +2499,7 @@ class vmmCreate(vmmGObjectUI):
                 'passwd': self._get_config_oscontainer_source_password,
                 'insecure': self._get_config_oscontainer_isecure
             }
-            for key, getter in bootstrap_arg_keys.iteritems():
+            for key, getter in bootstrap_arg_keys.items():
                 bootstrap_args[key] = getter()
 
         parentobj = self._customize_window or self
++++++ e73abe5a-diskbackend-convert-to-long-the-calculated-size.patch ++++++
Subject: diskbackend: convert to long the calculated size
From: Pavel Hrdina phrd...@redhat.com Tue Oct 3 13:56:20 2017 +0200
Date: Thu Oct 19 09:06:44 2017 +0200:
Git: e73abe5a3acaa8e30363fb2ab8c9828b1fdb2589

If we convert to long the disk size, it may end up "0".  The size is
in GiB so it can be "0.1".

Introduced by commit <fab55c128ff3f092039bb950ecfd337568d2a9a8>.

Signed-off-by: Pavel Hrdina <phrd...@redhat.com>

diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py
index 5979e6e6..de745f4d 100644
--- a/virtinst/diskbackend.py
+++ b/virtinst/diskbackend.py
@@ -389,7 +389,7 @@ class CloneStorageCreator(_StorageCreator):
         msg = None
         vfs = os.statvfs(os.path.dirname(self._path))
         avail = vfs[statvfs.F_FRSIZE] * vfs[statvfs.F_BAVAIL]
-        need = long(self._size) * long(1024) * long(1024) * long(1024)
+        need = long(self._size * 1024 * 1024 * 1024)
         if need > avail:
             if self._sparse:
                 msg = _("The filesystem will not have enough free space"
@@ -409,9 +409,8 @@ class CloneStorageCreator(_StorageCreator):
         text = (_("Cloning %(srcfile)s") %
                 {'srcfile': os.path.basename(self._input_path)})
 
-        size_bytes = (long(self.get_size()) *
-                      long(1024) * long(1024) * long(1024))
-        progresscb.start(filename=self._output_path, size=long(size_bytes),
+        size_bytes = long(self.get_size() * 1024 * 1024 * 1024)
+        progresscb.start(filename=self._output_path, size=size_bytes,
                          text=text)
 
         # Plain file clone
++++++ f41aafc7-Use-enumerate-instead-of-range-and-len.patch ++++++
Subject: Use enumerate instead of range and len
From: Radostin Stoyanov rstoyan...@gmail.com Wed Oct 11 12:36:03 2017 +0100
Date: Fri Oct 20 13:18:31 2017 -0400:
Git: f41aafc721e8fbe9baa0bc52ec9482ae3e5666ae


diff --git a/virtManager/addhardware.py b/virtManager/addhardware.py
index cf860e63..3793006c 100644
--- a/virtManager/addhardware.py
+++ b/virtManager/addhardware.py
@@ -594,9 +594,8 @@ class vmmAddHardware(vmmGObjectUI):
         vmmAddHardware.populate_smartcard_mode_combo(vm, combo)
 
         idx = -1
-        for rowid in range(len(combo.get_model())):
+        for rowid, row in enumerate(combo.get_model()):
             idx = 0
-            row = combo.get_model()[rowid]
             if row[0] == virtinst.VirtualSmartCardDevice.MODE_DEFAULT:
                 idx = rowid
                 break
@@ -641,9 +640,8 @@ class vmmAddHardware(vmmGObjectUI):
         vmmAddHardware.populate_tpm_type_combo(vm, combo)
 
         idx = -1
-        for rowid in range(len(combo.get_model())):
+        for rowid, row in enumerate(combo.get_model()):
             idx = 0
-            row = combo.get_model()[rowid]
             if row[0] == virtinst.VirtualTPMDevice.TYPE_DEFAULT:
                 idx = rowid
                 break
diff --git a/virtManager/netlist.py b/virtManager/netlist.py
index 4f1e991a..0bb17965 100644
--- a/virtManager/netlist.py
+++ b/virtManager/netlist.py
@@ -288,8 +288,8 @@ class vmmNetworkList(vmmGObjectUI):
             model.insert(0, row)
             default = 0
         elif label:
-            default = [idx for idx in range(len(model)) if
-                       model[idx][2] == label][0]
+            default = [idx for idx, model_label in enumerate(model) if
+                       model_label[2] == label][0]
 
         _add_manual_bridge_row()
         return default
diff --git a/virtManager/systray.py b/virtManager/systray.py
index ff550738..aa62df0a 100644
--- a/virtManager/systray.py
+++ b/virtManager/systray.py
@@ -274,7 +274,7 @@ class vmmSystray(vmmGObject):
             vm_submenu.insert(menu_item, 0)
             return
 
-        for i in range(0, len(vm_names)):
+        for i, name in enumerate(vm_names):
             name = vm_names[i]
             connkey = vm_mappings[name]
             if connkey in self.conn_vm_menuitems[uri]:
diff --git a/virtinst/cloner.py b/virtinst/cloner.py
index 7345bdad..9be5485c 100644
--- a/virtinst/cloner.py
+++ b/virtinst/cloner.py
@@ -430,8 +430,7 @@ class Cloner(object):
             iface.macaddr = mac
 
         # Changing storage XML
-        for i in range(len(self._original_disks)):
-            orig_disk = self._original_disks[i]
+        for i, orig_disk in enumerate(self._original_disks):
             clone_disk = self._clone_disks[i]
 
             for disk in self._guest.get_devices("disk"):
++++++ f7c8cf9f-devicepanic-dont-return-empty-model-list.patch ++++++
Subject: devicepanic: Don't return empty model list (bz #1505532)
From: Cole Robinson crobi...@redhat.com Fri Oct 27 09:42:54 2017 +0200
Date: Fri Oct 27 09:42:54 2017 +0200:
Git: f7c8cf9f667f2b0122f5689009d74c94c38c7316

Callers don't expect it, and it breaks opening the addhardware dialog
for aarch64 VMs

https://bugzilla.redhat.com/show_bug.cgi?id=1505532

diff --git a/virtinst/devicepanic.py b/virtinst/devicepanic.py
index 63a88f71..9f44e93e 100644
--- a/virtinst/devicepanic.py
+++ b/virtinst/devicepanic.py
@@ -49,12 +49,13 @@ class VirtualPanicDevice(VirtualDevice):
     @staticmethod
     def get_models(os):
         if os.is_x86():
-            return [VirtualPanicDevice.MODEL_ISA, 
VirtualPanicDevice.MODEL_HYPERV]
+            return [VirtualPanicDevice.MODEL_ISA,
+                    VirtualPanicDevice.MODEL_HYPERV]
         elif os.is_pseries():
             return [VirtualPanicDevice.MODEL_PSERIES]
         elif os.is_s390x():
             return [VirtualPanicDevice.MODEL_S390]
-        return None
+        return []
 
     @staticmethod
     def get_default_model(os):
++++++ virtinst-add-caasp-support.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.728406428 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.728406428 +0100
@@ -1,9 +1,9 @@
 References: bsc#1010060
 
-Index: virt-manager-1.4.2/virtinst/urlfetcher.py
+Index: virt-manager-1.4.3/virtinst/urlfetcher.py
 ===================================================================
---- virt-manager-1.4.2.orig/virtinst/urlfetcher.py
-+++ virt-manager-1.4.2/virtinst/urlfetcher.py
+--- virt-manager-1.4.3.orig/virtinst/urlfetcher.py
++++ virt-manager-1.4.3/virtinst/urlfetcher.py
 @@ -466,6 +466,10 @@ def _distroFromSUSEContent(fetcher, arch
              dclass = OESDistro
              if distro_version is None:
@@ -20,7 +20,7 @@
              else:
                  self.os_variant += major_version
 +        elif self.os_variant.startswith("caasp"):
-+            self.os_variant = "caasp"
++            self.os_variant = "caasp" + distro_version
          else:
              self.os_variant += "9"
  

++++++ virtinst-add-sle15-detection-support.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.748405702 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.752405557 +0100
@@ -39,8 +39,8 @@
      dclass = GenericDistro
      if distribution:
          if re.match(".*SUSE Linux Enterprise Server*", distribution[1]) or \
--            re.match(".*SUSE SLES*", distribution[1]):
-+            re.match(".*SUSE SLES*", distribution[1]) or re.match("SLES*", 
distribution[1]):
+-                re.match(".*SUSE SLES*", distribution[1]):
++           re.match(".*SUSE SLES*", distribution[1]) or re.match("SLES*", 
distribution[1]):
              dclass = SLESDistro
              if distro_version is None:
                  distro_version = _parse_sle_distribution(distribution)

++++++ virtinst-default-xen-to-qcow2-format.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.764405123 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.768404978 +0100
@@ -1,10 +1,10 @@
 Reference: bnc#885380
 Allow Xen based VMs to default to using qcow2
-Index: virt-manager-1.3.0/virtinst/support.py
+Index: virt-manager-1.4.3/virtinst/support.py
 ===================================================================
---- virt-manager-1.3.0.orig/virtinst/support.py
-+++ virt-manager-1.3.0/virtinst/support.py
-@@ -258,7 +258,7 @@ SUPPORT_CONN_DISK_SD = _make(version="1.
+--- virt-manager-1.4.3.orig/virtinst/support.py
++++ virt-manager-1.4.3/virtinst/support.py
+@@ -259,7 +259,7 @@ SUPPORT_CONN_DISK_SD = _make(version="1.
  # default to qcow2. It might be fine for xen or qemu older than the versions
  # here, but until someone tests things I'm going to be a bit conservative.
  SUPPORT_CONN_DEFAULT_QCOW2 = _make(

++++++ virtinst-modify-gui-defaults.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.800403817 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.800403817 +0100
@@ -1,8 +1,6 @@
-Enhancement for the following GUI wizard installation options.
+Enhancement for the following GUI wizard installation option.
 1) If Xen, leave 'Architecture options' expanded so users know PV
 is the default
-2) Under 'Network selection' default to a bridge that has an actual
-IP address if available (not just the first one found).
 Index: virt-manager-1.4.2/virtManager/create.py
 ===================================================================
 --- virt-manager-1.4.2.orig/virtManager/create.py
@@ -29,46 +27,3 @@
  
          if self._set_conn(activeconn) is False:
              return False
-Index: virt-manager-1.4.2/virtManager/netlist.py
-===================================================================
---- virt-manager-1.4.2.orig/virtManager/netlist.py
-+++ virt-manager-1.4.2/virtManager/netlist.py
-@@ -170,9 +170,19 @@ class vmmNetworkList(vmmGObjectUI):
-         return rows, vnet_bridges, default_label
- 
-     def _find_physical_devices(self, vnet_bridges):
-+        def check_for_inet(bname):
-+            if bname is not None:
-+                from subprocess import Popen, PIPE
-+                p = Popen(['/sbin/ip', 'addr', 'show', bname], stdout=PIPE, 
stderr=PIPE)
-+                stdout, stderr = p.communicate()
-+                if stdout and 'inet' in stdout:
-+                    return True
-+            return False
-+
-         rows = []
-         can_default = False
-         default_label = None
-+        default_label_with_inet = None
-         skip_ifaces = ["lo"]
- 
-         vnet_taps = []
-@@ -232,10 +242,18 @@ class vmmNetworkList(vmmGObjectUI):
-             if can_default and not default_label:
-                 default_label = label
- 
-+            # Default to a bridge that has an actual inet addr
-+            if default_label_with_inet is None:
-+                if check_for_inet(source_name):
-+                    default_label_with_inet = label
-+
-             rows.append(self._build_source_row(
-                 nettype, source_name, label, sensitive, True,
-                 key=name))
- 
-+        if default_label and default_label_with_inet is not None:
-+            default_label = default_label_with_inet
-+
-         return rows, default_label
- 
-     def _populate_network_model(self, model):

++++++ virtinst-refresh_before_fetch_pool.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.820403093 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.820403093 +0100
@@ -13,14 +13,14 @@
 
 Signed-off-by: Chunyan Liu <cy...@suse.com>
 
-Index: virt-manager-1.3.0/virtinst/pollhelpers.py
+Index: virt-manager-1.4.3/virtinst/pollhelpers.py
 ===================================================================
---- virt-manager-1.3.0.orig/virtinst/pollhelpers.py
-+++ virt-manager-1.3.0/virtinst/pollhelpers.py
+--- virt-manager-1.4.3.orig/virtinst/pollhelpers.py
++++ virt-manager-1.4.3/virtinst/pollhelpers.py
 @@ -133,6 +133,19 @@ def fetch_pools(backend, origmap, build_
  
      if backend.check_support(
-         backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not FORCE_OLD_POLL:
+             backend.SUPPORT_CONN_LISTALLSTORAGEPOOLS) and not FORCE_OLD_POLL:
 +
 +        # Refresh pools before poll_helper. For those
 +        # 'active' but target path not exist (or other reasons

++++++ virtinst-vol-default-nocow.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.856401788 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.856401788 +0100
@@ -4,10 +4,10 @@
 
 Signed-off-by: Chunyan Liu <cy...@suse.com>
 
-Index: virt-manager-1.4.2/virtinst/storage.py
+Index: virt-manager-1.4.3/virtinst/storage.py
 ===================================================================
---- virt-manager-1.4.2.orig/virtinst/storage.py
-+++ virt-manager-1.4.2/virtinst/storage.py
+--- virt-manager-1.4.3.orig/virtinst/storage.py
++++ virt-manager-1.4.3/virtinst/storage.py
 @@ -708,6 +708,12 @@ class StorageVolume(_StorageObject):
          return self._pool_xml.get_disk_type()
      file_type = property(_get_vol_type)
@@ -21,11 +21,11 @@
  
      ##################
      # XML properties #
-Index: virt-manager-1.4.2/virtinst/support.py
+Index: virt-manager-1.4.3/virtinst/support.py
 ===================================================================
---- virt-manager-1.4.2.orig/virtinst/support.py
-+++ virt-manager-1.4.2/virtinst/support.py
-@@ -324,6 +324,8 @@ SUPPORT_CONN_RNG_URANDOM = _make(version
+--- virt-manager-1.4.3.orig/virtinst/support.py
++++ virt-manager-1.4.3/virtinst/support.py
+@@ -325,6 +325,8 @@ SUPPORT_CONN_RNG_URANDOM = _make(version
  SUPPORT_CONN_USB3_PORTS = _make(version="1.3.5")
  SUPPORT_CONN_MACHVIRT_PCI_DEFAULT = _make(version="3.0.0")
  SUPPORT_CONN_QEMU_XHCI = _make(version="3.3.0")

++++++ virtman-allow-destroy-from-shutdown-menu-of-crashed-vm.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.872401208 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.876401063 +0100
@@ -6,11 +6,11 @@
 4) Edit the VM's /etc/default/grub file and remove the crashkernel information
    and then run grub2-mkconfig /boot/grub2/grub.cfg.
 5) Start the VM and within the VM's terminal type "echo 'c' > 
/proc/sysrq-trigger"
-Index: virt-manager-1.4.0/virtManager/manager.py
+Index: virt-manager-1.4.3/virtManager/manager.py
 ===================================================================
---- virt-manager-1.4.0.orig/virtManager/manager.py
-+++ virt-manager-1.4.0/virtManager/manager.py
-@@ -839,7 +839,7 @@ class vmmManager(vmmGObjectUI):
+--- virt-manager-1.4.3.orig/virtManager/manager.py
++++ virt-manager-1.4.3/virtManager/manager.py
+@@ -843,7 +843,7 @@ class vmmManager(vmmGObjectUI):
              show_pause = bool(vm and vm.is_unpauseable())
          else:
              show_pause = bool(vm and vm.is_pauseable())
@@ -19,10 +19,10 @@
  
          if vm and vm.managedsave_supported:
              self.change_run_text(vm.has_managed_save())
-Index: virt-manager-1.4.0/virtManager/vmmenu.py
+Index: virt-manager-1.4.3/virtManager/vmmenu.py
 ===================================================================
---- virt-manager-1.4.0.orig/virtManager/vmmenu.py
-+++ virt-manager-1.4.0/virtManager/vmmenu.py
+--- virt-manager-1.4.3.orig/virtManager/vmmenu.py
++++ virt-manager-1.4.3/virtManager/vmmenu.py
 @@ -31,6 +31,7 @@ class _VMMenu(Gtk.Menu):
          self._parent = src
          self._current_vm_cb = current_vm_cb

++++++ virtman-default-guest-from-host-os.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.884400772 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.884400772 +0100
@@ -1,11 +1,11 @@
 Enhancement to default to the host os version when creating a VM
 and media detection of the install source is turned off.
-Index: virt-manager-1.4.2/virtManager/create.py
+Index: virt-manager-1.4.3/virtManager/create.py
 ===================================================================
---- virt-manager-1.4.2.orig/virtManager/create.py
-+++ virt-manager-1.4.2/virtManager/create.py
-@@ -24,6 +24,9 @@ import os
- import cStringIO
+--- virt-manager-1.4.3.orig/virtManager/create.py
++++ virt-manager-1.4.3/virtManager/create.py
+@@ -24,6 +24,9 @@ import pkgutil
+ import os
  import threading
  import time
 +import sys

++++++ virtman-increase-setKeepAlive-count.patch ++++++
--- /var/tmp/diff_new_pack.ekR4KC/_old  2017-10-31 15:44:37.904400048 +0100
+++ /var/tmp/diff_new_pack.ekR4KC/_new  2017-10-31 15:44:37.904400048 +0100
@@ -13,5 +13,5 @@
 -            self._backend.setKeepAlive(20, 1)
 +            self._backend.setKeepAlive(20, 10)
          except Exception as e:
-             if (type(e) is not AttributeError and
+             if (not isinstance(e, AttributeError) and
                  not util.is_error_nosupport(e)):


Reply via email to