Date: Tuesday, July 17, 2012 @ 14:10:36 Author: andrea Revision: 163678
Fix regression (FS#30728) Added: pyqt/trunk/fix-pyuic4.patch Modified: pyqt/trunk/PKGBUILD ------------------+ PKGBUILD | 14 +++++--- fix-pyuic4.patch | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 101 insertions(+), 4 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2012-07-17 18:01:27 UTC (rev 163677) +++ PKGBUILD 2012-07-17 18:10:36 UTC (rev 163678) @@ -6,17 +6,23 @@ pkgbase=pyqt pkgname=('pyqt-common' 'pyqt' 'python2-pyqt') pkgver=4.9.4 -pkgrel=1 +pkgrel=2 arch=('i686' 'x86_64') url="http://riverbankcomputing.co.uk/software/pyqt/intro" license=('GPL') makedepends=('qt' 'python-sip' 'python-dbus' 'python2-sip' 'phonon' 'python-opengl' 'qt-assistant-compat' 'qtwebkit' 'python2-dbus') - source=("http://riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-${pkgver}.tar.gz") -md5sums=('a0b6a820633366365af5124ddbd059c7') +source=("http://riverbankcomputing.co.uk/static/Downloads/PyQt4/PyQt-x11-gpl-${pkgver}.tar.gz" + 'fix-pyuic4.patch') +md5sums=('a0b6a820633366365af5124ddbd059c7' + '097651aea0bafded5abdfd6d62afd2ad') build() { - cd "${srcdir}" + # FS#30728 + cd "${srcdir}"/PyQt-x11-gpl-${pkgver} + patch -p1 -i "${srcdir}"/fix-pyuic4.patch + cd .. + cp -r PyQt-x11-gpl-${pkgver} Py2Qt-x11-gpl-${pkgver} cd "${srcdir}/PyQt-x11-gpl-${pkgver}" Added: fix-pyuic4.patch =================================================================== --- fix-pyuic4.patch (rev 0) +++ fix-pyuic4.patch 2012-07-17 18:10:36 UTC (rev 163678) @@ -0,0 +1,91 @@ +# HG changeset patch +# User Phil Thompson <phil at riverbankcomputing.com> +# Date 2012-07-13 13:39:28 +0100 +# Node ID 29b668ada14c1428a3bbfe8f0324c6626bd5ac9a +# Parent fd0f3da9d79ca9858d10a20c15fb85456cb832d7 +Fixed a regression in pyuic's handling of custom widgets. + +diff --git a/pyuic/uic/Compiler/qobjectcreator.py b/pyuic/uic/Compiler/qobjectcreator.py +--- a/pyuic/uic/Compiler/qobjectcreator.py ++++ b/pyuic/uic/Compiler/qobjectcreator.py +@@ -1,6 +1,6 @@ + ############################################################################# + ## +-## Copyright (C) 2011 Riverbank Computing Limited. ++## Copyright (C) 2012 Riverbank Computing Limited. + ## Copyright (C) 2006 Thorsten Marek. + ## All right reserved. + ## +@@ -100,7 +100,6 @@ + assert widgetClass not in self._widgets + self._widgets[widgetClass] = (baseClass, module) + +- + def _resolveBaseclass(self, baseClass): + try: + for x in range(0, 10): +@@ -114,19 +113,17 @@ + except KeyError: + raise ValueError("unknown baseclass %s" % baseClass) + +- + def search(self, cls): + try: +- self._usedWidgets.add(cls) + baseClass = self._resolveBaseclass(self._widgets[cls][0]) + DEBUG("resolved baseclass of %s: %s" % (cls, baseClass)) +- +- return type(cls, (baseClass,), +- {"module" : ""}) +- + except KeyError: + return None + ++ self._usedWidgets.add(cls) ++ ++ return type(cls, (baseClass, ), {"module" : ""}) ++ + def _writeImportCode(self): + imports = {} + for widget in self._usedWidgets: +diff --git a/pyuic/uic/objcreator.py b/pyuic/uic/objcreator.py +--- a/pyuic/uic/objcreator.py ++++ b/pyuic/uic/objcreator.py +@@ -102,19 +102,26 @@ + self._modules.append(self._customWidgets) + + def createQObject(self, classname, *args, **kwargs): +- # Handle scoped names, typically static factory methods. +- parts = classname.split('.') +- factory = self.findQObjectType(parts[0]) ++ # Handle regular and custom widgets. ++ factory = self.findQObjectType(classname) + +- if factory is not None: +- for part in parts[1:]: +- factory = getattr(factory, part, None) +- if factory is None: +- break +- else: +- return self._cpolicy.instantiate(factory, *args, **kwargs) ++ if factory is None: ++ # Handle scoped names, typically static factory methods. ++ parts = classname.split('.') + +- raise NoSuchWidgetError(classname) ++ if len(parts) > 1: ++ factory = self.findQObjectType(parts[0]) ++ ++ if factory is not None: ++ for part in parts[1:]: ++ factory = getattr(factory, part, None) ++ if factory is None: ++ break ++ ++ if factory is None: ++ raise NoSuchWidgetError(classname) ++ ++ return self._cpolicy.instantiate(factory, *args, **kwargs) + + def invoke(self, rname, method, args=()): + return self._cpolicy.invoke(rname, method, args)