diff --git a/535fb6f6-hide-scrollbar-until-something-scrollable.patch b/535fb6f6-hide-scrollbar-until-something-scrollable.patch new file mode 100644 index 00000000..047d8b7e --- /dev/null +++ b/535fb6f6-hide-scrollbar-until-something-scrollable.patch @@ -0,0 +1,25 @@ +Subject: serialcon: Hide scrollbar until there's something to scroll +From: Cole Robinson crobinso@redhat.com Fri Apr 25 19:13:44 2014 -0400 +Date: Tue Apr 29 10:28:06 2014 -0400: +Git: 02f49be9e2f58032a7c124ea77d7983834dc80b6 + + +Index: virt-manager-1.0.1/virtManager/serialcon.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/serialcon.py ++++ virt-manager-1.0.1/virtManager/serialcon.py +@@ -378,6 +378,14 @@ class vmmSerialConsole(vmmGObject): + self.box.append_page(self.error_label, Gtk.Label("")) + self.box.show_all() + ++ scrollbar.hide() ++ scrollbar.get_adjustment().connect( ++ "changed", self._scrollbar_adjustment_changed, scrollbar) ++ ++ def _scrollbar_adjustment_changed(self, adjustment, scrollbar): ++ scrollbar.set_visible( ++ adjustment.get_upper() > adjustment.get_page_size()) ++ + def _cleanup(self): + self.console.cleanup() + self.console = None diff --git a/535fe0c2-fix-screenshot-with-qxl-spice.patch b/535fe0c2-fix-screenshot-with-qxl-spice.patch new file mode 100644 index 00000000..15dce416 --- /dev/null +++ b/535fe0c2-fix-screenshot-with-qxl-spice.patch @@ -0,0 +1,22 @@ +Subject: snapshots: Fix screenshot with qxl+spice (bz 1089780) +From: Cole Robinson crobinso@redhat.com Tue Apr 29 13:26:26 2014 -0400 +Date: Tue Apr 29 13:26:26 2014 -0400: +Git: 2272166844f84943342fc097af927a09737ee57f + + +Index: virt-manager-1.0.1/virtManager/snapshots.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/snapshots.py ++++ virt-manager-1.0.1/virtManager/snapshots.py +@@ -379,6 +379,11 @@ class vmmSnapshotPage(vmmGObjectUI): + return + + try: ++ # Perform two screenshots, because qemu + qxl has a bug where ++ # screenshot generally only shows the data from the previous ++ # screenshot request: ++ # https://bugs.launchpad.net/qemu/+bug/1314293 ++ self._take_screenshot() + mime, sdata = self._take_screenshot() + except: + logging.exception("Error taking screenshot") diff --git a/535feaca-fix-storage-when-directory-name-contains-whitespace.patch b/535feaca-fix-storage-when-directory-name-contains-whitespace.patch new file mode 100644 index 00000000..6f50d394 --- /dev/null +++ b/535feaca-fix-storage-when-directory-name-contains-whitespace.patch @@ -0,0 +1,29 @@ +Subject: Fix using storage when the directory name contains whitespace (bz 1091384) +From: Cole Robinson crobinso@redhat.com Tue Apr 29 14:09:14 2014 -0400 +Date: Tue Apr 29 14:09:14 2014 -0400: +Git: feadd98fed045ec40d5d5cf8250c7b05517eb9c9 + + +diff --git a/virtinst/diskbackend.py b/virtinst/diskbackend.py +index 370996c..3d5aed8 100644 +--- a/virtinst/diskbackend.py ++++ b/virtinst/diskbackend.py +@@ -137,13 +137,14 @@ def manage_path(conn, path): + return vol, pool, path_is_pool + + dirname = os.path.dirname(path) +- poolname = StoragePool.find_free_name( +- conn, os.path.basename(dirname) or "pool") ++ poolname = os.path.basename(dirname).replace(" ", "_") ++ if not poolname: ++ poolname = "dirpool" ++ poolname = StoragePool.find_free_name(conn, poolname) + logging.debug("Attempting to build pool=%s target=%s", poolname, dirname) + + poolxml = StoragePool(conn) +- poolxml.name = poolxml.find_free_name( +- conn, os.path.basename(dirname) or "dirpool") ++ poolxml.name = poolname + poolxml.type = poolxml.TYPE_DIR + poolxml.target_path = dirname + pool = poolxml.install(build=False, create=True, autostart=True) diff --git a/535ff0b7-fix-install-when-one-package-is-already-installed.patch b/535ff0b7-fix-install-when-one-package-is-already-installed.patch new file mode 100644 index 00000000..494086a8 --- /dev/null +++ b/535ff0b7-fix-install-when-one-package-is-already-installed.patch @@ -0,0 +1,41 @@ +Subject: packageutils: Fix install when one package is already installed (bz 1090181) +From: Cole Robinson crobinso@redhat.com Tue Apr 29 14:34:31 2014 -0400 +Date: Tue Apr 29 14:34:31 2014 -0400: +Git: 15449eb12601ec1b88aa6d8ee52986ef5ab41ae2 + + +Index: virt-manager-1.0.1/virtManager/packageutils.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/packageutils.py ++++ virt-manager-1.0.1/virtManager/packageutils.py +@@ -53,7 +53,12 @@ def check_packagekit(parent, errbox, pac + return + + try: +- packagekit_install(parent, packages) ++ for package in packages[:]: ++ if packagekit_isinstalled(package): ++ packages.remove(package) ++ ++ if packages: ++ packagekit_install(parent, packages) + except Exception, e: + # PackageKit frontend should report an error for us, so just log + # the actual error +@@ -63,6 +68,16 @@ def check_packagekit(parent, errbox, pac + return True + + ++def packagekit_isinstalled(package): ++ bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) ++ pk_control = Gio.DBusProxy.new_sync(bus, 0, None, ++ "org.freedesktop.PackageKit", ++ "/org/freedesktop/PackageKit", ++ "org.freedesktop.PackageKit.Query", None) ++ ++ return pk_control.IsInstalled("(ss)", package, "") ++ ++ + def packagekit_install(parent, package_list): + bus = Gio.bus_get_sync(Gio.BusType.SESSION, None) + pk_control = Gio.DBusProxy.new_sync(bus, 0, None, diff --git a/536152fe-fix-error-detecting-OS-in-show-all-list.patch b/536152fe-fix-error-detecting-OS-in-show-all-list.patch new file mode 100644 index 00000000..8f4312d8 --- /dev/null +++ b/536152fe-fix-error-detecting-OS-in-show-all-list.patch @@ -0,0 +1,29 @@ +Subject: create: Fix error when detecting OS in 'show all' list +From: Cole Robinson crobinso@redhat.com Wed Apr 30 15:46:06 2014 -0400 +Date: Wed Apr 30 15:46:06 2014 -0400: +Git: 3d49bbe6494ac1fa9305c019df1db81371a89385 + +The will be free'd when the widget is repopulated, so don't access +stale data. + +Index: virt-manager-1.0.1/virtManager/create.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/create.py ++++ virt-manager-1.0.1/virtManager/create.py +@@ -1181,6 +1181,7 @@ class vmmCreate(vmmGObjectUI): + type_row = self._selected_os_row() + if not type_row: + return ++ old_type = type_row[0] + + self.show_all_os = True + self.populate_os_type_model() +@@ -1188,7 +1189,7 @@ class vmmCreate(vmmGObjectUI): + os_type_list = self.widget("install-os-type") + os_type_model = os_type_list.get_model() + for idx in range(len(os_type_model)): +- if os_type_model[idx][0] == type_row[0]: ++ if os_type_model[idx][0] == old_type: + os_type_list.set_active(idx) + break + diff --git a/536154d8-show-error-if-launching-delete-dialog-fails.patch b/536154d8-show-error-if-launching-delete-dialog-fails.patch new file mode 100644 index 00000000..2fd8ddec --- /dev/null +++ b/536154d8-show-error-if-launching-delete-dialog-fails.patch @@ -0,0 +1,23 @@ +Subject: engine: Show error if launching delete dialog fails +From: Cole Robinson crobinso@redhat.com Wed Apr 30 15:54:00 2014 -0400 +Date: Wed Apr 30 15:54:00 2014 -0400: +Git: f35438a01bbf3ba54b4e448d14e7981110a74f08 + + +Index: virt-manager-1.0.1/virtManager/engine.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/engine.py ++++ virt-manager-1.0.1/virtManager/engine.py +@@ -1176,6 +1176,9 @@ class vmmEngine(vmmGObject): + conn = self._lookup_conn(uri) + vm = conn.get_vm(uuid) + +- if not self.delete_dialog: +- self.delete_dialog = vmmDeleteDialog() +- self.delete_dialog.show(vm, src.topwin) ++ try: ++ if not self.delete_dialog: ++ self.delete_dialog = vmmDeleteDialog() ++ self.delete_dialog.show(vm, src.topwin) ++ except Exception, e: ++ src.err.show_err(_("Error launching delete dialog: %s") % str(e)) diff --git a/53615662-call-path_exists-before-getting-storage-volume.patch b/53615662-call-path_exists-before-getting-storage-volume.patch new file mode 100644 index 00000000..be234125 --- /dev/null +++ b/53615662-call-path_exists-before-getting-storage-volume.patch @@ -0,0 +1,24 @@ +Subject: connection: Call path_exists before getting storage volume (bz 1092739) +From: Cole Robinson crobinso@redhat.com Wed Apr 30 16:00:34 2014 -0400 +Date: Wed Apr 30 16:00:34 2014 -0400: +Git: 5c28a00d3e28ba7446f323a31ac47a194eb200b1 + +path_exists will check to ensure the volume actually survives a pool +refresh, incase it was deleted behind libvirt's back. This makes the +delete dialog happier at least. + +Index: virt-manager-1.0.1/virtManager/connection.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/connection.py ++++ virt-manager-1.0.1/virtManager/connection.py +@@ -751,6 +751,10 @@ class vmmConnection(vmmGObject): + return self.get_pool_by_name("default") + + def get_vol_by_path(self, path): ++ # path_exists will handle stuff like refreshing a busted pool ++ if not virtinst.VirtualDisk.path_exists(self.get_backend(), path): ++ return None ++ + for pool in self.pools.values(): + for vol in pool.get_volumes().values(): + if vol.get_target_path() == path: diff --git a/virt-manager.changes b/virt-manager.changes index dea2d277..5a6bd39f 100644 --- a/virt-manager.changes +++ b/virt-manager.changes @@ -1,3 +1,21 @@ +------------------------------------------------------------------- +Wed Apr 30 07:24:54 MDT 2014 - carnold@suse.com + +- Upstream bug fixes + 535fb6f6-hide-scrollbar-until-something-scrollable.patch + 535fe0c2-fix-screenshot-with-qxl-spice.patch + 535feaca-fix-storage-when-directory-name-contains-whitespace.patch + 535ff0b7-fix-install-when-one-package-is-already-installed.patch + 536152fe-fix-error-detecting-OS-in-show-all-list.patch + 536154d8-show-error-if-launching-delete-dialog-fails.patch + 53615662-call-path_exists-before-getting-storage-volume.patch + +------------------------------------------------------------------- +Tue Apr 29 11:37:12 MDT 2014 - carnold@suse.com + +- s390x: Set the correct emulator + virtinst-set-qemu-emulator.patch + ------------------------------------------------------------------- Mon Apr 28 15:21:58 MDT 2014 - carnold@suse.com diff --git a/virt-manager.spec b/virt-manager.spec index 09aec896..cb8202c2 100644 --- a/virt-manager.spec +++ b/virt-manager.spec @@ -28,7 +28,7 @@ Name: virt-manager Version: 1.0.1 -Release: 0 +Release: 3.2 Summary: Virtual Machine Manager License: GPL-2.0+ Group: System/Monitoring @@ -54,6 +54,13 @@ Patch15: 534d6406-display-the-domain-for-PCI-devices.patch Patch16: 534eafe4-avoid-useless-errors-when-connection-closes.patch Patch17: 5350d9cc-display-error-on-empty-installation-URL.patch Patch18: 535584ed-fix-target-validation-when-editing-device.patch +Patch19: 535fb6f6-hide-scrollbar-until-something-scrollable.patch +Patch20: 535fe0c2-fix-screenshot-with-qxl-spice.patch +Patch21: 535feaca-fix-storage-when-directory-name-contains-whitespace.patch +Patch22: 535ff0b7-fix-install-when-one-package-is-already-installed.patch +Patch23: 536152fe-fix-error-detecting-OS-in-show-all-list.patch +Patch24: 536154d8-show-error-if-launching-delete-dialog-fails.patch +Patch25: 53615662-call-path_exists-before-getting-storage-volume.patch Patch50: virtman-desktop.patch Patch51: virtman-cdrom.patch Patch52: virtman-kvm.patch @@ -190,6 +197,13 @@ machine). %patch16 -p1 %patch17 -p1 %patch18 -p1 +%patch19 -p1 +%patch20 -p1 +%patch21 -p1 +%patch22 -p1 +%patch23 -p1 +%patch24 -p1 +%patch25 -p1 %patch50 -p1 %patch51 -p1 %patch52 -p1 diff --git a/virtinst-detect-windows-media.patch b/virtinst-detect-windows-media.patch index cf11444f..a2763cf2 100644 --- a/virtinst-detect-windows-media.patch +++ b/virtinst-detect-windows-media.patch @@ -2,7 +2,7 @@ Index: virt-manager-1.0.1/virtinst/urlfetcher.py =================================================================== --- virt-manager-1.0.1.orig/virtinst/urlfetcher.py +++ virt-manager-1.0.1/virtinst/urlfetcher.py -@@ -379,6 +379,24 @@ def _distroFromContent(fetcher, arch, vm +@@ -383,6 +383,24 @@ def _distroFromContent(fetcher, arch, vm return ob @@ -27,7 +27,7 @@ Index: virt-manager-1.0.1/virtinst/urlfetcher.py def getDistroStore(guest, fetcher): stores = [] logging.debug("Finding distro store for location=%s", fetcher.location) -@@ -398,6 +416,10 @@ def getDistroStore(guest, fetcher): +@@ -402,6 +420,10 @@ def getDistroStore(guest, fetcher): if dist: return dist @@ -38,7 +38,7 @@ Index: virt-manager-1.0.1/virtinst/urlfetcher.py # FIXME: This 'distro ==' doesn't cut it. 'distro' is from our os # dictionary, so would look like 'fedora9' or 'rhel5', so this needs # to be a bit more intelligent -@@ -1144,6 +1166,13 @@ class ALTLinuxDistro(Distro): +@@ -1148,6 +1170,13 @@ class ALTLinuxDistro(Distro): logging.debug("Regex didn't match, not a %s distro", self.name) return False diff --git a/virtinst-set-qemu-emulator.patch b/virtinst-set-qemu-emulator.patch index d416acea..8ea11077 100644 --- a/virtinst-set-qemu-emulator.patch +++ b/virtinst-set-qemu-emulator.patch @@ -10,13 +10,16 @@ Index: virt-manager-1.0.1/virtinst/guest.py import logging import urlgrabber.progress as progress -@@ -724,14 +725,19 @@ class Guest(XMLBuilder): +@@ -724,14 +725,22 @@ class Guest(XMLBuilder): self.emulator = None return - if self.emulator: + if self.conn.is_qemu(): -+ preferred_emulator = "/usr/bin/qemu-system-x86_64" ++ if self.os.arch == "s390x": ++ preferred_emulator = "/usr/bin/qemu-system-s390x" ++ else: ++ preferred_emulator = "/usr/bin/qemu-system-x86_64" + else: + preferred_emulator = "/usr/lib/xen/bin/qemu-system-i386" + if self.emulator and self.emulator == preferred_emulator: @@ -31,7 +34,7 @@ Index: virt-manager-1.0.1/virtinst/guest.py + self.emulator = preferred_emulator + elif self.os.is_hvm() and self.type == "xen": + self.emulator = "/usr/lib/xen/bin/qemu-dm" -+ else: ++ elif not self.emulator: + self.emulator = "/usr/bin/qemu-kvm" def _set_cpu_defaults(self): diff --git a/virtman-autoyast-support.patch b/virtman-autoyast-support.patch index cd9543c3..48aed75e 100644 --- a/virtman-autoyast-support.patch +++ b/virtman-autoyast-support.patch @@ -37,7 +37,7 @@ Index: virt-manager-1.0.1/virtManager/create.py # Get previous type_row = self._selected_os_row() if not type_row: -@@ -1589,7 +1612,10 @@ class vmmCreate(vmmGObjectUI): +@@ -1590,7 +1613,10 @@ class vmmCreate(vmmGObjectUI): if extra: extraargs += extra if ks: @@ -49,7 +49,7 @@ Index: virt-manager-1.0.1/virtManager/create.py if extraargs: self.guest.installer.extraargs = extraargs -@@ -1985,6 +2011,7 @@ class vmmCreate(vmmGObjectUI): +@@ -1986,6 +2012,7 @@ class vmmCreate(vmmGObjectUI): dl = self.set_os_val(self.widget("install-os-type"), distro_type) vl = self.set_os_val(self.widget("install-os-version"), distro_var) self.set_distro_labels(dl, vl) diff --git a/virtman-libvirtd-not-running.patch b/virtman-libvirtd-not-running.patch index fbf12b31..2eaa2ad1 100644 --- a/virtman-libvirtd-not-running.patch +++ b/virtman-libvirtd-not-running.patch @@ -1,6 +1,8 @@ ---- virt-manager-1.0.0/virtManager/packageutils.py.orig 2014-03-13 14:43:07.187281364 -0600 -+++ virt-manager-1.0.0/virtManager/packageutils.py 2014-03-13 14:45:06.847936733 -0600 -@@ -136,8 +136,8 @@ def start_libvirtd(): +Index: virt-manager-1.0.1/virtManager/packageutils.py +=================================================================== +--- virt-manager-1.0.1.orig/virtManager/packageutils.py ++++ virt-manager-1.0.1/virtManager/packageutils.py +@@ -151,8 +151,8 @@ def start_libvirtd(): logging.debug("libvirtd not running, asking system-config-services " "to start it") scs = Gio.DBusProxy.new_sync(bus, 0, None,