diff --git a/PackageKit-0.4.6-correct-allow-cancel-duplicate-logic.patch b/PackageKit-0.4.6-correct-allow-cancel-duplicate-logic.patch new file mode 100644 index 0000000..4817ca2 --- /dev/null +++ b/PackageKit-0.4.6-correct-allow-cancel-duplicate-logic.patch @@ -0,0 +1,112 @@ +commit 826973135802ee453e014dc601168690b49af25d +Author: Richard Hughes +Date: Wed Apr 1 12:25:02 2009 +0100 + + bugfix: correct the allow-cancel duplicate logic so we don't remember the state of the previous transaction + +diff --git a/src/pk-backend.c b/src/pk-backend.c +index 6bedd12..d55245d 100644 +--- a/src/pk-backend.c ++++ b/src/pk-backend.c +@@ -74,6 +74,13 @@ + */ + #define PK_BACKEND_FINISHED_TIMEOUT_GRACE 10 /* ms */ + ++/* a boolean with unset */ ++typedef enum { ++ PK_BACKEND_TRISTATE_FALSE = FALSE, ++ PK_BACKEND_TRISTATE_TRUE = TRUE, ++ PK_BACKEND_TRISTATE_UNSET ++} PkBackendTristate; ++ + struct _PkBackendPrivate + { + GModule *handle; +@@ -101,7 +108,7 @@ struct _PkBackendPrivate + PkBackendFileChanged file_changed_func; + gpointer file_changed_data; + gboolean during_initialize; +- gboolean allow_cancel; ++ PkBackendTristate allow_cancel; + gboolean finished; + guint last_percentage; + guint last_subpercentage; +@@ -1436,9 +1443,9 @@ pk_backend_set_allow_cancel (PkBackend *backend, gboolean allow_cancel) + } + + /* same as last state? */ +- if (backend->priv->allow_cancel == allow_cancel) { ++ if (backend->priv->allow_cancel == (PkBackendTristate) allow_cancel) { + egg_debug ("ignoring same allow-cancel state"); +- return TRUE; ++ return FALSE; + } + + /* can we do the action? */ +@@ -1456,9 +1463,16 @@ pk_backend_set_allow_cancel (PkBackend *backend, gboolean allow_cancel) + gboolean + pk_backend_get_allow_cancel (PkBackend *backend) + { ++ gboolean allow_cancel = FALSE; ++ + g_return_val_if_fail (PK_IS_BACKEND (backend), FALSE); + g_return_val_if_fail (backend->priv->locked != FALSE, FALSE); +- return backend->priv->allow_cancel; ++ ++ /* return FALSE if we never set state */ ++ if (backend->priv->allow_cancel != PK_BACKEND_TRISTATE_UNSET) ++ allow_cancel = backend->priv->allow_cancel; ++ ++ return allow_cancel; + } + + /** +@@ -1952,11 +1966,11 @@ pk_backend_reset (PkBackend *backend) + backend->priv->set_error = FALSE; + backend->priv->set_signature = FALSE; + backend->priv->set_eula = FALSE; +- backend->priv->allow_cancel = FALSE; + backend->priv->finished = FALSE; + backend->priv->has_sent_package = FALSE; + backend->priv->thread = NULL; + backend->priv->last_package = NULL; ++ backend->priv->allow_cancel = PK_BACKEND_TRISTATE_UNSET; + backend->priv->status = PK_STATUS_ENUM_UNKNOWN; + backend->priv->exit = PK_EXIT_ENUM_UNKNOWN; + backend->priv->role = PK_ROLE_ENUM_UNKNOWN; +@@ -2327,6 +2341,35 @@ pk_backend_test (EggTest *test) + egg_test_loop_wait (test, PK_BACKEND_FINISHED_ERROR_TIMEOUT + 400); + egg_test_loop_check (test); + ++ /************************************************************ ++ **************** CANCEL TRISTATE ****************** ++ ************************************************************/ ++ egg_test_title (test, "get allow cancel after reset"); ++ pk_backend_reset (backend); ++ ret = pk_backend_get_allow_cancel (backend); ++ egg_test_assert (test, !ret); ++ ++ /************************************************************/ ++ egg_test_title (test, "set allow cancel TRUE"); ++ ret = pk_backend_set_allow_cancel (backend, TRUE); ++ egg_test_assert (test, ret); ++ ++ /************************************************************/ ++ egg_test_title (test, "set allow cancel TRUE (repeat)"); ++ ret = pk_backend_set_allow_cancel (backend, TRUE); ++ egg_test_assert (test, !ret); ++ ++ /************************************************************/ ++ egg_test_title (test, "set allow cancel FALSE"); ++ ret = pk_backend_set_allow_cancel (backend, FALSE); ++ egg_test_assert (test, ret); ++ ++ /************************************************************/ ++ egg_test_title (test, "set allow cancel FALSE (after reset)"); ++ pk_backend_reset (backend); ++ ret = pk_backend_set_allow_cancel (backend, FALSE); ++ egg_test_assert (test, ret); ++ + #ifdef PK_IS_DEVELOPER + egg_test_title (test, "check we enforce finished after error_code"); + if (number_messages == 1) diff --git a/PackageKit-0.4.6-fix-FakeRepository-for-unicode-paths.patch b/PackageKit-0.4.6-fix-FakeRepository-for-unicode-paths.patch new file mode 100644 index 0000000..37db543 --- /dev/null +++ b/PackageKit-0.4.6-fix-FakeRepository-for-unicode-paths.patch @@ -0,0 +1,25 @@ +commit 4dfcd53103ac572e27e67e85088b6dee48b2e171 +Author: Richard Hughes +Date: Thu Apr 2 11:20:55 2009 +0100 + + bugfix: yum cannot handle FakeRepository.repo, unlike a normal Repository, so just handle the local case specially. Fixes rh#486720 + +diff --git a/backends/yum/yumBackend.py b/backends/yum/yumBackend.py +index f13bd9d..aade7bd 100755 +--- a/backends/yum/yumBackend.py ++++ b/backends/yum/yumBackend.py +@@ -2641,8 +2641,13 @@ class PackageKitCallback(RPMBaseCallback): + # we don't know the summary text + self.base.package(package_id, status, "") + else: ++ # local file shouldn't put the path in the package_id ++ repo_id = _to_unicode(self.curpkg.repo.id) ++ if repo_id.find("/") != -1: ++ repo_id = 'local' ++ + pkgver = _get_package_ver(self.curpkg) +- package_id = self.base.get_package_id(self.curpkg.name, pkgver, self.curpkg.arch, self.curpkg.repo) ++ package_id = self.base.get_package_id(self.curpkg.name, pkgver, self.curpkg.arch, repo_id) + self.base.package(package_id, status, self.curpkg.summary) + + def event(self, package, action, te_current, te_total, ts_current, ts_total): diff --git a/PackageKit.spec b/PackageKit.spec index e3ba779..7e43969 100644 --- a/PackageKit.spec +++ b/PackageKit.spec @@ -10,7 +10,7 @@ Summary: Package management service Name: PackageKit Version: 0.4.6 #Release: 0.3.%{?alphatag}git%{?dist} -Release: 1%{?dist} +Release: 2%{?dist} License: GPLv2+ Group: System Environment/Libraries URL: http://www.packagekit.org @@ -18,11 +18,18 @@ URL: http://www.packagekit.org Source0: http://www.packagekit.org/releases/%{name}-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) -# Fedora-specific -# Set Vendor.conf up for Fedora. +# Fedora-specific: set Vendor.conf up for Fedora. Patch0: PackageKit-0.3.8-Fedora-Vendor.conf.patch + +# Fedora specific: the yum backend doesn't do time estimation correctly Patch1: PackageKit-0.4.4-Fedora-turn-off-time.conf.patch +# Already upstream: 4dfcd53103ac572e27e67e85088b6dee48b2e171 +Patch2: PackageKit-0.4.6-fix-FakeRepository-for-unicode-paths.patch + +# Already upstream: 826973135802ee453e014dc601168690b49af25d +Patch3: PackageKit-0.4.6-correct-allow-cancel-duplicate-logic.patch + Requires: dbus >= %{dbus_version} Requires: dbus-glib >= %{dbus_glib_version} Requires: PackageKit-glib = %{version}-%{release} @@ -223,6 +230,8 @@ using PackageKit. %setup -q %patch0 -p1 -b .fedora %patch1 -p1 -b .no-time +%patch2 -p1 -b .fake-repo-unicode +%patch3 -p1 -b .correct-allow-cancel %build %configure --enable-yum --enable-smart --with-default-backend=yum --disable-local --disable-ruck @@ -417,6 +426,10 @@ update-mime-database %{_datadir}/mime &> /dev/null || : %{_includedir}/PackageKit/backend/*.h %changelog +* Thu Apr 02 2009 Richard Hughes - 0.4.6-2 +- Fix installing local files with a unicode path. Fixes rh#486720 +- Fix the allow cancel duplicate filtering with a patch from upstream. + * Mon Mar 30 2009 Richard Hughes - 0.4.6-1 - New upstream version