Hello community,

here is the log from the commit of package virt-manager for openSUSE:Factory 
checked in at 2020-09-29 19:02:38
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/virt-manager (Old)
 and      /work/SRC/openSUSE:Factory/.virt-manager.new.4249 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "virt-manager"

Tue Sep 29 19:02:38 2020 rev:210 rq:838334 version:3.0.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/virt-manager/virt-manager.changes        
2020-09-17 14:56:05.416211031 +0200
+++ /work/SRC/openSUSE:Factory/.virt-manager.new.4249/virt-manager.changes      
2020-09-29 19:02:53.489852795 +0200
@@ -1,0 +2,10 @@
+Mon Sep 28 08:17:59 MDT 2020 - [email protected]
+
+- Upstream bug fixes (bsc#1027942)
+  ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
+  a010c49b-cli-Fix-os-variant-help-introspection.patch
+  79ebcbcb-viewers-Fix-spice-audio.patch
+  e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch
+  9c13d2f8-Remove-use-of-problematic-terminology.patch
+
+-------------------------------------------------------------------
@@ -4 +14 @@
-- Update to virt-manager 3.0.0 (fate#326786)
+- jsc#SLE-16582, Upgrade virt-manager >= 3.x

New:
----
  79ebcbcb-viewers-Fix-spice-audio.patch
  9c13d2f8-Remove-use-of-problematic-terminology.patch
  a010c49b-cli-Fix-os-variant-help-introspection.patch
  ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
  e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch

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

Other differences:
------------------
++++++ virt-manager.spec ++++++
--- /var/tmp/diff_new_pack.qv2EuE/_old  2020-09-29 19:02:54.529854058 +0200
+++ /var/tmp/diff_new_pack.qv2EuE/_new  2020-09-29 19:02:54.537854067 +0200
@@ -32,6 +32,11 @@
 Source2:        virt-install.desktop
 Source3:        virt-manager-supportconfig
 # Upstream Patches
+Patch1:         
ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch
+Patch2:         a010c49b-cli-Fix-os-variant-help-introspection.patch
+Patch3:         79ebcbcb-viewers-Fix-spice-audio.patch
+Patch4:         e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch
+Patch5:         9c13d2f8-Remove-use-of-problematic-terminology.patch
 # SUSE Only
 Patch70:        virtman-desktop.patch
 Patch71:        virtman-kvm.patch
@@ -154,6 +159,11 @@
 %prep
 %setup -q
 # Upstream Patches
+%patch1 -p1
+%patch2 -p1
+%patch3 -p1
+%patch4 -p1
+%patch5 -p1
 # SUSE Only
 %patch70 -p1
 %patch71 -p1

++++++ 79ebcbcb-viewers-Fix-spice-audio.patch ++++++
Subject: viewers: Fix spice audio
From: Cole Robinson [email protected] Mon Sep 21 11:35:51 2020 -0400
Date: Mon Sep 21 11:35:51 2020 -0400:
Git: 79ebcbcb71d77548443b7943d65bacb216c93769

Commit 1689ebb25 removed what I thought was an unused audio
handle in the spice viewer code, but apparently it does
something. Strangely some VMs work fine (linux, windows 7),
but my windows 10 VMs need this to actually get audio.
No clue what that's all about

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

Signed-off-by: Cole Robinson <[email protected]>

diff --git a/virtManager/details/viewers.py b/virtManager/details/viewers.py
index 46ff1431..da9f906d 100644
--- a/virtManager/details/viewers.py
+++ b/virtManager/details/viewers.py
@@ -476,6 +476,7 @@ class SpiceViewer(Viewer):
         Viewer.__init__(self, *args, **kwargs)
         self._spice_session = None
         self._display = None
+        self._audio = None
         self._main_channel = None
         self._display_channel = None
         self._usbdev_manager = None
@@ -618,6 +619,14 @@ class SpiceViewer(Viewer):
             self._init_widget()
             self.emit("connected")
 
+        elif (type(channel) in [SpiceClientGLib.PlaybackChannel,
+                                SpiceClientGLib.RecordChannel] and
+                                not self._audio):
+            # It's unclear why we need this audio handle, but it
+            # does matter:
+            # https://bugzilla.redhat.com/show_bug.cgi?id=1881080
+            self._audio = SpiceClientGLib.Audio.get(self._spice_session, None)
+
     def _agent_connected_cb(self, src, val):
         self.emit("agent-connected")  # pragma: no cover
 
@@ -631,6 +640,7 @@ class SpiceViewer(Viewer):
             _SIGS.disconnect_obj_signals(self._spice_session)
             self._spice_session.disconnect()
         self._spice_session = None
+        self._audio = None
         if self._display:
             self._display.destroy()
         self._display = None
++++++ 9c13d2f8-Remove-use-of-problematic-terminology.patch ++++++
Subject: Remove use of problematic terminology
From: Cole Robinson [email protected] Wed Sep 23 14:33:17 2020 -0400
Date: Wed Sep 23 14:33:17 2020 -0400:
Git: 9c13d2f8788414f1ab5b0300ce82b5d9ce277880

Following kernel recommendation here:
https://lkml.org/lkml/2020/7/4/229

Signed-off-by: Cole Robinson <[email protected]>

Index: virt-manager-3.0.0/man/virt-install.rst
===================================================================
--- virt-manager-3.0.0.orig/man/virt-install.rst
+++ virt-manager-3.0.0/man/virt-install.rst
@@ -1247,7 +1247,7 @@ Connect the guest to the host network. E
     Tell virt-install not to add any default network interface.
 
 If ``--network`` is omitted a single NIC will be created in the guest. If
-there is a bridge device in the host with a physical interface enslaved,
+there is a bridge device in the host with a physical interface attached,
 that will be used for connectivity. Failing that, the virtual network
 called ``default`` will be used. This option can be specified multiple
 times to setup more than one NIC.
Index: virt-manager-3.0.0/tests/uitests/test_addhardware.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_addhardware.py
+++ virt-manager-3.0.0/tests/uitests/test_addhardware.py
@@ -310,7 +310,7 @@ class AddHardware(lib.testcase.UITestCas
         self.app.open(break_setfacl=True)
         details = self.app.open_details_window("test-clone-simple")
 
-        # Say 'Yes' and it should fail, then blacklist the paths
+        # Say 'Yes' and it should fail, then denylist the paths
         addhw = self._open_addhw_window(details)
         tab = self._select_hw(addhw, "Storage", "storage-tab")
         tab.find_fuzzy("Select or create", "radio").click()
Index: virt-manager-3.0.0/tests/uitests/test_connection.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_connection.py
+++ virt-manager-3.0.0/tests/uitests/test_connection.py
@@ -15,7 +15,7 @@ class UITestConnection(lib.testcase.UITe
 
     def testConnectionBlacklist(self):
         self.app.open(
-            extra_opts=["--test-options=object-blacklist=test-many-devices"])
+            extra_opts=["--test-options=object-denylist=test-many-devices"])
         manager = self.app.topwin
 
         def _delete_vm(vmname):
Index: virt-manager-3.0.0/virtManager/connection.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/connection.py
+++ virt-manager-3.0.0/virtManager/connection.py
@@ -38,46 +38,46 @@ class _ObjectList(vmmGObject):
         vmmGObject.__init__(self)
 
         self._objects = []
-        self._blacklist = {}
+        self._denylist = {}
         self._lock = threading.Lock()
 
     def _cleanup(self):
         self._objects = []
 
-    def _blacklist_key(self, obj):
+    def _denylist_key(self, obj):
         return str(obj.__class__) + obj.get_name()
 
-    def add_blacklist(self, obj):
+    def add_denylist(self, obj):
         """
-        Add an object to the blacklist. Basically a list of objects we
+        Add an object to the denylist. Basically a list of objects we
         choose not to poll, because they threw an error at init time
 
-        :param obj: vmmLibvirtObject to blacklist
+        :param obj: vmmLibvirtObject to denylist
         :returns: number of added object to list
         """
-        key = self._blacklist_key(obj)
-        count = self._blacklist.get(key, 0)
-        self._blacklist[key] = count + 1
-        return self._blacklist[key]
+        key = self._denylist_key(obj)
+        count = self._denylist.get(key, 0)
+        self._denylist[key] = count + 1
+        return self._denylist[key]
 
-    def remove_blacklist(self, obj):
+    def remove_denylist(self, obj):
         """
-        :param obj: vmmLibvirtObject to remove from blacklist
-        :returns: True if object was blacklisted or False otherwise.
+        :param obj: vmmLibvirtObject to remove from denylist
+        :returns: True if object was denylisted or False otherwise.
         """
-        key = self._blacklist_key(obj)
-        return bool(self._blacklist.pop(key, 0))
+        key = self._denylist_key(obj)
+        return bool(self._denylist.pop(key, 0))
 
-    def in_blacklist(self, obj):
+    def in_denylist(self, obj):
         """
-        If an object is in list only once don't consider it blacklisted,
+        If an object is in list only once don't consider it denylisted,
         give it one more chance.
 
         :param obj: vmmLibvirtObject to check
-        :returns: True if object is blacklisted
+        :returns: True if object is denylisted
         """
-        key = self._blacklist_key(obj)
-        return self._blacklist.get(key, 0) >= _ObjectList.BLACKLIST_COUNT
+        key = self._denylist_key(obj)
+        return self._denylist.get(key, 0) >= _ObjectList.BLACKLIST_COUNT
 
     def remove(self, obj):
         """
@@ -90,7 +90,7 @@ class _ObjectList(vmmGObject):
             # Identity check is sufficient here, since we should never be
             # asked to remove an object that wasn't at one point in the list.
             if obj not in self._objects:
-                return self.remove_blacklist(obj)
+                return self.remove_denylist(obj)
 
             self._objects.remove(obj)
             return True
@@ -1060,11 +1060,11 @@ class vmmConnection(vmmGObject):
 
             if initialize_failed:
                 log.debug("Blacklisting %s=%s", class_name, obj.get_name())
-                count = self._objects.add_blacklist(obj)
-                log.debug("Object added in blacklist, count=%d", count)
+                count = self._objects.add_denylist(obj)
+                log.debug("Object added in denylist, count=%d", count)
                 return
 
-            self._objects.remove_blacklist(obj)
+            self._objects.remove_denylist(obj)
             if not self._objects.add(obj):
                 log.debug("New %s=%s requested, but it's already tracked.",
                     class_name, obj.get_name())
@@ -1134,7 +1134,7 @@ class vmmConnection(vmmGObject):
 
             gone_objects.extend(gone)
             preexisting_objects.extend([o for o in master if o not in new])
-            new = [n for n in new if not self._objects.in_blacklist(n)]
+            new = [n for n in new if not self._objects.in_denylist(n)]
             return new
 
         new_vms = _process_objects("vms")
Index: virt-manager-3.0.0/virtManager/lib/testmock.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/lib/testmock.py
+++ virt-manager-3.0.0/virtManager/lib/testmock.py
@@ -157,7 +157,7 @@ class CLITestOptionsClass:
         Spice doesn't return values here when we are just testing
         against seabios in uitests, this fakes it to hit more code paths
     * fake-systray: Enable the fake systray window
-    * object-blacklist=NAME: Make object initialize for that name
+    * object-denylist=NAME: Make object initialize for that name
         fail to test some connection code paths
     * conn-crash: Test connection abruptly closing like when
         libvirtd is restarted.
@@ -205,7 +205,7 @@ class CLITestOptionsClass:
         self.fake_vnc_username = _get("fake-vnc-username")
         self.fake_console_resolution = _get("fake-console-resolution")
         self.fake_systray = _get("fake-systray")
-        self.object_blacklist = _get_value("object-blacklist")
+        self.object_denylist = _get_value("object-denylist")
         self.conn_crash = _get("conn-crash")
         self.fake_agent_event = _get_value("fake-agent-event")
         self.fake_nodedev_event = _get_value("fake-nodedev-event")
Index: virt-manager-3.0.0/virtManager/object/domain.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/object/domain.py
+++ virt-manager-3.0.0/virtManager/object/domain.py
@@ -393,7 +393,7 @@ class vmmDomain(vmmLibvirtObject):
             self.get_uuid() == "00000000-0000-0000-0000-000000000000"):
             # We don't want virt-manager to track Domain-0 since it
             # doesn't work with our UI. Raising an error will ensures it
-            # is blacklisted.
+            # is denylisted.
             raise RuntimeError(  # pragma: no cover
                     "Can't track Domain-0 as a vmmDomain")
 
Index: virt-manager-3.0.0/virtManager/object/libvirtobject.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/object/libvirtobject.py
+++ virt-manager-3.0.0/virtManager/object/libvirtobject.py
@@ -171,7 +171,7 @@ class vmmLibvirtObject(vmmGObject):
 
         initialize_failed = False
         try:
-            if self.config.CLITestOptions.object_blacklist == self._name:
+            if self.config.CLITestOptions.object_denylist == self._name:
                 raise RuntimeError("fake initialization error")
 
             self._init_libvirt_state()
Index: virt-manager-3.0.0/virtinst/devices/graphics.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/devices/graphics.py
+++ virt-manager-3.0.0/virtinst/devices/graphics.py
@@ -151,7 +151,7 @@ class DeviceGraphics(Device):
     def _spice_supported(self):
         if not self.conn.is_qemu() and not self.conn.is_test():
             return False
-        # Spice has issues on some host arches, like ppc, so whitelist it
+        # Spice has issues on some host arches, like ppc, so allow it
         if self.conn.caps.host.cpu.arch not in ["i686", "x86_64"]:
             return False
         return True
Index: virt-manager-3.0.0/virtinst/devices/interface.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/devices/interface.py
+++ virt-manager-3.0.0/virtinst/devices/interface.py
@@ -72,7 +72,7 @@ def _host_default_bridge():
         return dev  # pragma: no cover
 
     # Old style, peth0 == phys dev, eth0 == netloop, xenbr0 == bridge,
-    # vif0.0 == netloop enslaved, eth0 == default route
+    # vif0.0 == netloop attached, eth0 == default route
     try:
         defn = int(dev[-1])
     except Exception:  # pragma: no cover
++++++ a010c49b-cli-Fix-os-variant-help-introspection.patch ++++++
Subject: cli: Fix --os-variant=help introspection
From: Cole Robinson [email protected] Sun Sep 20 16:00:33 2020 -0400
Date: Sun Sep 20 16:00:46 2020 -0400:
Git: a010c49b8b3c0ecca5ec99d962b2b98f25694a37

Signed-off-by: Cole Robinson <[email protected]>

Index: virt-manager-3.0.0/virtinst/cli.py
===================================================================
--- virt-manager-3.0.0.orig/virtinst/cli.py
+++ virt-manager-3.0.0/virtinst/cli.py
@@ -1830,7 +1830,7 @@ class OSVariantData(object):
 
 
 class ParserOSVariant(VirtCLIParser):
-    cli_arg_name = "os-variant"
+    cli_arg_name = "os_variant"
     supports_clearxml = False
 
     @classmethod
++++++ ba08f84b-addstorage-Return-to-using-qcow2-sparse-by-default.patch ++++++
Subject: addstorage: Return to using qcow2 sparse by default
From: Cole Robinson [email protected] Sat Sep 19 18:06:45 2020 -0400
Date: Sun Sep 20 10:11:36 2020 -0400:
Git: ba08f84b3408744e9aa9763d100e8aa217c1f5ff

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

See 15a6a7e2105440df528f75c4df4d2471df28bd1e

The idea behind virt-manager's sparse vs nonsparse default, is that if
the user selected 'raw' for as the default image format, assume they
want to maximize performance, so fully allocate the disk.

qcow2 didn't support anything except sparse, so the sparse=True vs
sparse=False made no difference. So we always set sparse=False

Then qcow2 grows non-sparse support, and virt-manager is suddenly
defaulting to it, which is not the intention.

Default to sparse when requested format isn't raw

Signed-off-by: Cole Robinson <[email protected]>

Index: virt-manager-3.0.0/tests/uitests/test_addhardware.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_addhardware.py
+++ virt-manager-3.0.0/tests/uitests/test_addhardware.py
@@ -152,11 +152,8 @@ class AddHardware(lib.testcase.UITestCas
         tab.combo_select("Cache mode:", "none")
         tab.combo_select("Discard mode:", "ignore")
         tab.combo_select("Detect zeroes:", "unmap")
-        # Size too big
-        tab.find("GiB", "spin button").set_text("2000")
-        self._finish(addhw, check=None)
-        self.app.click_alert_button("not enough free space", "Close")
-        tab.find("GiB", "spin button").set_text("1.5")
+        # High number but we are non-sparse by default so it won't complain
+        tab.find("GiB", "spin button").set_text("200000")
         self._finish(addhw, check=details)
 
         # USB disk with removable setting
Index: virt-manager-3.0.0/tests/uitests/test_createvm.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_createvm.py
+++ virt-manager-3.0.0/tests/uitests/test_createvm.py
@@ -201,12 +201,11 @@ class NewVM(lib.testcase.UITestCase):
         self.forward(newvm)
         self.forward(newvm)
 
-        # Trigger size validation failure
+        # qcow2 default shouldn't trigger size error
         sizetext = newvm.find(None, "spin button", "GiB")
         sizetext.set_text("10000000")
-        self.forward(newvm, check=False)
-        self.app.click_alert_button("Storage parameter error", "OK")
-        sizetext.set_text("1")
+        _forward(newvm)
+        _back(newvm)
 
         # Use the storage browser to select a local file
         storagetext = newvm.find("storage-entry")
Index: virt-manager-3.0.0/virtManager/device/addstorage.py
===================================================================
--- virt-manager-3.0.0.orig/virtManager/device/addstorage.py
+++ virt-manager-3.0.0/virtManager/device/addstorage.py
@@ -251,14 +251,18 @@ class vmmAddStorage(vmmGObjectUI):
         if disk.wants_storage_creation():
             pool = disk.get_parent_pool()
             size = uiutil.spin_get_helper(self.widget("storage-size"))
-            sparse = False
+            fmt = self.conn.get_default_storage_format()
+
+            # If the user changed the default disk format to raw, assume
+            # they want to maximize performance, so fully allocate the
+            # disk image. Otherwise use sparse
+            sparse = fmt != 'raw'
 
             vol_install = virtinst.DeviceDisk.build_vol_install(
                 disk.conn, os.path.basename(disk.path), pool,
                 size, sparse)
             disk.set_vol_install(vol_install)
 
-            fmt = self.conn.get_default_storage_format()
             if disk.get_vol_install().supports_format():
                 log.debug("Using default prefs format=%s for path=%s",
                     fmt, disk.path)
++++++ e5a51f63-details-Change-Close-accelerator-to-ctrl+shift+w.patch ++++++
Subject: details: Change Close accelerator to ctrl+shift+w
From: Cole Robinson [email protected] Mon Sep 21 14:33:25 2020 -0400
Date: Mon Sep 21 14:33:25 2020 -0400:
Git: e5a51f637411b4b2efc789fdef99eb4860ac3b9f

Close accelerator changes ctrl+w -> ctrl+shift+w
Quit accelerator changes ctrl+q -> ctrl+shift+q

After aafb874c8, if the mouse pointer isn't inside the console
window, it has keyboard focus but ctrl+w will be sent to the vmwindow
and not the VM. ctrl+w is a common shortcut for deleting a word so
this is pretty disruptive if you are typing inside the VM

Use gnome-terminal-esque accelerators starting with ctrl+shift to
reduce the chance of collision.

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

Signed-off-by: Cole Robinson <[email protected]>

Index: virt-manager-3.0.0/tests/uitests/test_livetests.py
===================================================================
--- virt-manager-3.0.0.orig/tests/uitests/test_livetests.py
+++ virt-manager-3.0.0/tests/uitests/test_livetests.py
@@ -146,7 +146,7 @@ class Console(lib.testcase.UITestCase):
         # Check that modifiers don't work
         win.click()
         self.app.sleep(1)
-        win.keyCombo("<ctrl>w")
+        win.keyCombo("<ctrl><shift>w")
         lib.utils.check(lambda: win.showing)
         dom.destroy()
         win.find("Guest is not running.")
@@ -315,13 +315,13 @@ class Console(lib.testcase.UITestCase):
 
         # Ensure ctrl+w doesn't close the window, modifiers are disabled
         term.click()
-        win.keyCombo("<ctrl>w")
+        win.keyCombo("<ctrl><shift>w")
         lib.utils.check(lambda: win.showing)
-        # Shut it down, ensure <ctrl>w works again
+        # Shut it down, ensure accelerator works again
         self._destroy(win)
         win.click_title()
         self.app.sleep(1)
-        win.keyCombo("<ctrl>w")
+        win.keyCombo("<ctrl><shift>w")
         lib.utils.check(lambda: not win.showing)
 
 
Index: virt-manager-3.0.0/ui/vmwindow.ui
===================================================================
--- virt-manager-3.0.0.orig/ui/vmwindow.ui
+++ virt-manager-3.0.0/ui/vmwindow.ui
@@ -3,6 +3,16 @@
 <interface>
   <requires lib="gtk+" version="3.22"/>
   <object class="GtkAccelGroup" id="accelgroup1"/>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-close</property>
+  </object>
+  <object class="GtkImage" id="image2">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-quit</property>
+  </object>
   <object class="GtkWindow" id="vmm-vmwindow">
     <property name="can_focus">False</property>
     <property name="title" translatable="yes">Virtual Machine</property>
@@ -48,24 +58,28 @@
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="close4">
-                        <property name="label">gtk-close</property>
+                        <property name="label">_Close</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
+                        <property name="image">image1</property>
+                        <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
                         <signal name="activate" 
handler="on_details_menu_close_activate" swapped="no"/>
+                        <accelerator key="w" signal="activate" 
modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
                       </object>
                     </child>
                     <child>
                       <object class="GtkImageMenuItem" id="quit3">
-                        <property name="label">gtk-quit</property>
+                        <property name="label">_Quit</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="use_underline">True</property>
-                        <property name="use_stock">True</property>
+                        <property name="image">image2</property>
+                        <property name="use_stock">False</property>
                         <property name="accel_group">accelgroup1</property>
                         <signal name="activate" 
handler="on_details_menu_quit_activate" swapped="no"/>
+                        <accelerator key="q" signal="activate" 
modifiers="GDK_SHIFT_MASK | GDK_CONTROL_MASK"/>
                       </object>
                     </child>
                   </object>

Reply via email to