commit: 9d68c72164dd906c24e81a683353760e71671d9b Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org> AuthorDate: Sun May 3 17:05:30 2015 +0000 Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org> CommitDate: Sun May 3 17:10:33 2015 +0000 URL: https://gitweb.gentoo.org/proj/gnome.git/commit/?id=9d68c721
app-admin/packagekit-base: 1.0.3 → 1.0.6 Make portage backend less broken. .../0001-Fix-typo-python-backend-detection.patch | 25 + .../0002-Sort-imports-according-to-PEP8.patch | 72 ++ .../files/0003-Update-layman-API-usage-to-2.patch | 104 +++ .../files/0004-Use-python-idioms.patch | 191 +++++ .../0005-Enhance-get_repo_list-function.patch | 56 ++ ...-_get_cpv_slotted-with-collections-module.patch | 41 ++ .../files/0007-Simplify-_get_metadata.patch | 42 ++ .../files/0008-Remove-useless-instruction.patch | 24 + .../packagekit-base/files/0009-Cosmetics.patch | 800 +++++++++++++++++++++ ...010-Add-helper-to-change-portage-settings.patch | 73 ++ ...1-Remove-compatibility-with-older-portage.patch | 77 ++ ...PI-and-KEYWORDS-before-calling-setcpv-met.patch | 36 + .../files/packagekit-base-1.0.3-configure.patch | 11 - ...e-1.0.3.ebuild => packagekit-base-1.0.6.ebuild} | 40 +- 14 files changed, 1563 insertions(+), 29 deletions(-) diff --git a/app-admin/packagekit-base/files/0001-Fix-typo-python-backend-detection.patch b/app-admin/packagekit-base/files/0001-Fix-typo-python-backend-detection.patch new file mode 100644 index 0000000..5786d87 --- /dev/null +++ b/app-admin/packagekit-base/files/0001-Fix-typo-python-backend-detection.patch @@ -0,0 +1,25 @@ +From ff0e2a1fe4f32def11b74e9eb7ffa7989e3061d8 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 18:37:24 +0200 +Subject: [PATCH 01/12] Fix typo python backend detection + +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 655507f..844c454 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -454,7 +454,7 @@ if test x$enable_hif = xyes; then + fi + + have_python_backend="no" +-if test x$enable_entropy = xyes -o x$enable_pisi = xyes -o $enable_portage = xyes; then ++if test x$enable_entropy = xyes -o x$enable_pisi = xyes -o x$enable_portage = xyes; then + have_python_backend="yes" + fi + AM_CONDITIONAL(HAVE_PYTHON_BACKEND, test x$have_python_backend = xyes) +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0002-Sort-imports-according-to-PEP8.patch b/app-admin/packagekit-base/files/0002-Sort-imports-according-to-PEP8.patch new file mode 100644 index 0000000..abb8720 --- /dev/null +++ b/app-admin/packagekit-base/files/0002-Sort-imports-according-to-PEP8.patch @@ -0,0 +1,72 @@ +From 6d62155472c3ae1f85a756518e9014425354511d Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 12:08:43 +0200 +Subject: [PATCH 02/12] Sort imports according to PEP8 + +--- + backends/portage/portageBackend.py | 39 ++++++++++++++++++-------------------- + 1 file changed, 18 insertions(+), 21 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 82bf6cd..f403986 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -22,37 +22,34 @@ + # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + + import os ++import re ++import signal ++import sys + import traceback ++from itertools import izip + +- ++# layman imports ++import layman.config ++import layman.db + # packagekit imports ++from packagekit.backend import ( ++ PackageKitBaseBackend, ++ get_package_id, ++ split_package_id, ++) + from packagekit.enums import * +- +-from packagekit.backend import PackageKitBaseBackend, \ +- get_package_id, split_package_id +-from packagekit.progress import * + from packagekit.package import PackagekitPackage +- ++from packagekit.progress import * + # portage imports +-import portage +-import portage.versions +-import portage.dep ++import _emerge.AtomArg + import _emerge.actions +-import _emerge.stdout_spinner + import _emerge.create_depgraph_params +-import _emerge.AtomArg ++import _emerge.stdout_spinner ++import portage ++import portage.dep ++import portage.versions + from portage.exception import InvalidAtom + +-# layman imports +-import layman.db +-import layman.config +- +-# misc imports +-import sys +-import signal +-import re +-from itertools import izip +- + # NOTES: + # + # Package IDs description: +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0003-Update-layman-API-usage-to-2.patch b/app-admin/packagekit-base/files/0003-Update-layman-API-usage-to-2.patch new file mode 100644 index 0000000..afd94a2 --- /dev/null +++ b/app-admin/packagekit-base/files/0003-Update-layman-API-usage-to-2.patch @@ -0,0 +1,104 @@ +From b41a8c225d5fc593a10f54e10eba829c58d410d6 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 12:48:13 +0200 +Subject: [PATCH 03/12] Update layman API usage to >=2 + +--- + backends/portage/portageBackend.py | 44 ++++++++++++++------------------------ + 1 file changed, 16 insertions(+), 28 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index f403986..7ad23ec 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -28,9 +28,10 @@ import sys + import traceback + from itertools import izip + +-# layman imports ++# layman imports (>=2) + import layman.config + import layman.db ++import layman.remotedb + # packagekit imports + from packagekit.backend import ( + PackageKitBaseBackend, +@@ -1050,17 +1051,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + self.allow_cancel(True) + self.percentage(None) + +- # get installed and available dbs +- if hasattr(layman.config, "Config"): +- installed_layman_db = layman.db.DB(layman.config.Config()) +- else: +- installed_layman_db = layman.db.DB(layman.config.BareConfig()) +- +- if hasattr(layman.config, "Config"): +- available_layman_db = layman.db.RemoteDB(layman.config.Config()) +- else: +- available_layman_db = layman.db.RemoteDB(layman.config.BareConfig()) +- ++ conf = layman.config.BareConfig() ++ conf.set_option('quiet', True) ++ installed_layman_db = layman.db.DB(conf) ++ available_layman_db = layman.remotedb.RemoteDB(conf) + + # 'gentoo' is a dummy repo + self.repo_detail('gentoo', 'Gentoo Portage tree', True) +@@ -1386,15 +1380,9 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + myopts = {'--quiet': True} + +- # get installed and available dbs +- if hasattr(layman.config, "Config"): +- layman_opts = {"quiet": True} +- installed_layman_db = layman.db.DB(layman.config.Config()) +- else: +- layman_opts = {} +- conf = layman.config.BareConfig() +- conf.set_option("quiet", True) +- installed_layman_db = layman.db.DB(conf) ++ conf = layman.config.BareConfig() ++ conf.set_option('quiet', True) ++ installed_layman_db = layman.db.DB(conf) + + if force: + timestamp_path = os.path.join( +@@ -1404,8 +1392,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + try: + self._block_output() +- for o in installed_layman_db.overlays.keys(): +- installed_layman_db.sync(o, **layman_opts) ++ for overlay in installed_layman_db.overlays.keys(): ++ installed_layman_db.sync(overlay) + _emerge.actions.action_sync(self.pvar.settings, self.pvar.trees, + self.pvar.mtimedb, myopts, "") + except: +@@ -1541,9 +1529,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + "gentoo repository can't be disabled") + return + +- # get installed and available dbs +- installed_layman_db = layman.db.DB(layman.config.Config()) +- available_layman_db = layman.db.RemoteDB(layman.config.Config()) ++ conf = layman.config.BareConfig() ++ conf.set_option('quiet', True) ++ installed_layman_db = layman.db.DB(conf) ++ available_layman_db = layman.remotedb.RemoteDB(conf) + + # check now for repoid so we don't have to do it after + if not repoid in available_layman_db.overlays.keys(): +@@ -1567,8 +1556,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + try: + # TODO: clean the trick to prevent outputs from layman + self._block_output() +- installed_layman_db.add(available_layman_db.select(repoid), +- quiet=True) ++ installed_layman_db.add(available_layman_db.select(repoid)) + self._unblock_output() + except Exception, e: + self._unblock_output() +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0004-Use-python-idioms.patch b/app-admin/packagekit-base/files/0004-Use-python-idioms.patch new file mode 100644 index 0000000..dc9c982 --- /dev/null +++ b/app-admin/packagekit-base/files/0004-Use-python-idioms.patch @@ -0,0 +1,191 @@ +From e8520218790e939ee69891e1031ba7c9934959a1 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 12:49:15 +0200 +Subject: [PATCH 04/12] Use python idioms + +--- + backends/portage/portageBackend.py | 80 ++++++++++++-------------------------- + 1 file changed, 25 insertions(+), 55 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 7ad23ec..f37542e 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -191,10 +191,10 @@ class PortageBridge(): + self.settings.backup_changes("ACCEPT_PROPERTIES") + + # do not log with mod_echo (cleanly prevent some outputs) +- def filter_echo(x): return x != 'echo' +- elogs = self.settings["PORTAGE_ELOG_SYSTEM"].split() +- elogs = filter(filter_echo, elogs) +- self.settings["PORTAGE_ELOG_SYSTEM"] = ' '.join(elogs) ++ self.settings["PORTAGE_ELOG_SYSTEM"] = ' '.join([ ++ elog for elog in self.settings["PORTAGE_ELOG_SYSTEM"].split() ++ if elog != 'echo' ++ ]) + self.settings.backup_changes("PORTAGE_ELOG_SYSTEM") + + # finally, regenerate settings and lock them again +@@ -237,9 +237,7 @@ class PackageKitPortageMixin(object): + return TRANSACTION_FLAG_ONLY_DOWNLOAD in transaction_flags + + def _is_repo_enabled(self, layman_db, repo_name): +- if repo_name in layman_db.overlays.keys(): +- return True +- return False ++ return repo_name in layman_db.overlays.keys() + + def _get_search_list(self, keys_list): + ''' +@@ -334,18 +332,10 @@ class PackageKitPortageMixin(object): + return InternalPackageSet + + def _is_installed(self, cpv): +- if self.pvar.vardb.cpv_exists(cpv): +- return True +- return False ++ return self.pvar.vardb.cpv_exists(cpv) + + def _is_cpv_valid(self, cpv): +- if self._is_installed(cpv): +- # actually if is_installed return True that means cpv is in db +- return True +- elif self.pvar.portdb.cpv_exists(cpv): +- return True +- +- return False ++ return any([self._is_installed(cpv), self.pvar.portdb.cpv_exists(cpv)]) + + def _get_real_license_str(self, cpv, metadata): + # use conditionals info (w/ USE) in LICENSE and remove || +@@ -354,9 +344,7 @@ class PackageKitPortageMixin(object): + portage.dep.paren_reduce(metadata["LICENSE"]), + uselist=ebuild_settings.get("USE", "").split()))) + license.discard('||') +- license = ' '.join(license) +- +- return license ++ return ' '.join(license) + + def _signal_config_update(self): + result = list(portage.util.find_updated_config_files( +@@ -472,10 +460,7 @@ class PackageKitPortageMixin(object): + vartree=self.pvar.vardb) + + contents = db.getcontents() +- if not contents: +- return [] +- +- return db.getcontents().keys() ++ return contents.keys() if contents else [] + + def _cmp_cpv(self, cpv1, cpv2): + ''' +@@ -535,10 +520,7 @@ class PackageKitPortageMixin(object): + size = 0 + if self._is_installed(cpv): + size = self._get_metadata(cpv, ["SIZE"])[0] +- if size == '': +- size = 0 +- else: +- size = int(size) ++ size = int(size) if size else 0 + else: + self + metadata = self._get_metadata(cpv, ["IUSE", "SLOT"], in_dict=True) +@@ -553,8 +535,7 @@ class PackageKitPortageMixin(object): + + fetch_file = self.pvar.portdb.getfetchsizes(package[2], + package.use.enabled) +- for f in fetch_file: +- size += fetch_file[f] ++ size = sum(fetch_file) + + return size + +@@ -670,14 +651,12 @@ class PackageKitPortageMixin(object): + if FILTER_INSTALLED in filters: + cpv_list = self.pvar.vardb.match(cp) + elif FILTER_NOT_INSTALLED in filters: +- for cpv in self.pvar.portdb.match(cp): +- if not self._is_installed(cpv): +- cpv_list.append(cpv) ++ cpv_list = [cpv for cpv in self.pvar.portdb.match(cp) ++ if not self._is_installed(cpv)] + else: + cpv_list = self.pvar.vardb.match(cp) +- for cpv in self.pvar.portdb.match(cp): +- if cpv not in cpv_list: +- cpv_list.append(cpv) ++ cpv_list.extend(self.pvar.portdb.match(cp)) ++ cpv_list = set(cpv_list) + + # free filter + cpv_list = self._filter_free(cpv_list, filters) +@@ -714,22 +693,18 @@ class PackageKitPortageMixin(object): + pkg_keywords, repo, slot = self._get_metadata(cpv, + ["KEYWORDS", "repository", "SLOT"]) + +- pkg_keywords = pkg_keywords.split() +- sys_keywords = self.pvar.settings["ACCEPT_KEYWORDS"].split() +- keywords = [] +- +- for x in sys_keywords: +- if x in pkg_keywords: +- keywords.append(x) ++ # filter accepted keywords ++ keywords = list(set(pkg_keywords.split()).intersection( ++ set(self.pvar.settings["ACCEPT_KEYWORDS"].split()) ++ )) + + # if no keywords, check in package.keywords + if not keywords: + key_dict = self.pvar.settings.pkeywordsdict.get( + portage.dep.dep_getkey(cpv)) + if key_dict: +- for _, keys in key_dict.iteritems(): +- for x in keys: +- keywords.append(x) ++ for keys in key_dict.values(): ++ keyword.extend(keys) + + if not keywords: + keywords.append("no keywords") +@@ -942,9 +917,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + # now we can change cpv_list to a real cpv list + tmp_list = cpv_list[:] +- cpv_list = [] +- for x in tmp_list: +- cpv_list.append(x[2]) ++ cpv_list = [x[2] for x in tmp_list] + del tmp_list + + # free filter +@@ -1100,12 +1073,9 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + cpv_input.append(cpv) + +- packages_list = self._get_required_packages(cpv_input, recursive) +- + # now we can populate cpv_list +- cpv_list = [] +- for p in packages_list: +- cpv_list.append(p.cpv) ++ packages_list = self._get_required_packages(cpv_input, recursive) ++ cpv_list = [package.cpv for package in packages_list] + del packages_list + + # free filter +@@ -1535,7 +1505,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + available_layman_db = layman.remotedb.RemoteDB(conf) + + # check now for repoid so we don't have to do it after +- if not repoid in available_layman_db.overlays.keys(): ++ if repoid not in available_layman_db.overlays.keys(): + self.error(ERROR_REPO_NOT_FOUND, + "Repository %s was not found" % repoid) + return +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0005-Enhance-get_repo_list-function.patch b/app-admin/packagekit-base/files/0005-Enhance-get_repo_list-function.patch new file mode 100644 index 0000000..4f093e2 --- /dev/null +++ b/app-admin/packagekit-base/files/0005-Enhance-get_repo_list-function.patch @@ -0,0 +1,56 @@ +From 97afdc42a3cd50de94d824fab06b8c4a13a20c29 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 12:58:40 +0200 +Subject: [PATCH 05/12] Enhance get_repo_list function + +Adds a PEP257 docstring and use layman API to provide a description to +repositories. +--- + backends/portage/portageBackend.py | 24 +++++++++++++++--------- + 1 file changed, 15 insertions(+), 9 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index f37542e..ddeca0d 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -1016,10 +1016,14 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + self.percentage(100) + + def get_repo_list(self, filters): +- # NOTES: +- # use layman API +- # returns only official and supported repositories +- # and creates a dummy repo for portage tree ++ """ Get list of repository. ++ ++ Get the list of repository tagged as official and supported by current ++ setup of layman. ++ ++ Adds a dummy entry for gentoo-x86 official tree even though it appears ++ in layman's listing nowadays. ++ """ + self.status(STATUS_INFO) + self.allow_cancel(True) + self.percentage(None) +@@ -1033,11 +1037,13 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + self.repo_detail('gentoo', 'Gentoo Portage tree', True) + + if FILTER_NOT_DEVELOPMENT not in filters: +- for o in available_layman_db.overlays.keys(): +- if available_layman_db.overlays[o].is_official() \ +- and available_layman_db.overlays[o].is_supported(): +- self.repo_detail(o, o, +- self._is_repo_enabled(installed_layman_db, o)) ++ for repo_name, overlay in available_layman_db.overlays.items(): ++ if overlay.is_official() and overlay.is_supported(): ++ self.repo_detail( ++ repo_name, ++ overlay.name, ++ self._is_repo_enabled(installed_layman_db, repo_name) ++ ) + + def required_by(self, filters, pkgs, recursive): + # TODO: manage non-installed package +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0006-Simplify-_get_cpv_slotted-with-collections-module.patch b/app-admin/packagekit-base/files/0006-Simplify-_get_cpv_slotted-with-collections-module.patch new file mode 100644 index 0000000..6f47b1d --- /dev/null +++ b/app-admin/packagekit-base/files/0006-Simplify-_get_cpv_slotted-with-collections-module.patch @@ -0,0 +1,41 @@ +From d581bea1699a8d9982e91a5de2b8dd315b6c2c54 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 13:05:27 +0200 +Subject: [PATCH 06/12] Simplify _get_cpv_slotted with collections module + +--- + backends/portage/portageBackend.py | 8 +++----- + 1 file changed, 3 insertions(+), 5 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index ddeca0d..773256a 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -26,6 +26,7 @@ import re + import signal + import sys + import traceback ++from collections import defaultdict + from itertools import izip + + # layman imports (>=2) +@@ -540,14 +541,11 @@ class PackageKitPortageMixin(object): + return size + + def _get_cpv_slotted(self, cpv_list): +- cpv_dict = {} ++ cpv_dict = defaultdict(list) + + for cpv in cpv_list: + slot = self._get_metadata(cpv, ["SLOT"])[0] +- if slot not in cpv_dict: +- cpv_dict[slot] = [cpv] +- else: +- cpv_dict[slot].append(cpv) ++ cpv_dict[slot].append(cpv) + + return cpv_dict + +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0007-Simplify-_get_metadata.patch b/app-admin/packagekit-base/files/0007-Simplify-_get_metadata.patch new file mode 100644 index 0000000..ed158fe --- /dev/null +++ b/app-admin/packagekit-base/files/0007-Simplify-_get_metadata.patch @@ -0,0 +1,42 @@ +From fa38519e8b0785199a1181e5cc7287190a29fc44 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 17:54:15 +0200 +Subject: [PATCH 07/12] Simplify _get_metadata + +--- + backends/portage/portageBackend.py | 16 ++++++---------- + 1 file changed, 6 insertions(+), 10 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 773256a..fc2d45a 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -497,19 +497,15 @@ class PackageKitPortageMixin(object): + If in_dict is True, metadata is returned in a dict object. + If add_cache_keys is True, cached keys are added to keys in parameter. + ''' +- if self._is_installed(cpv): +- aux_get = self.pvar.vardb.aux_get +- if add_cache_keys: +- keys.extend(list(self.pvar.vardb._aux_cache_keys)) +- else: +- aux_get = self.pvar.portdb.aux_get +- if add_cache_keys: +- keys.extend(list(self.pvar.portdb._aux_cache_keys)) ++ db = self.pvar.vardb if self._is_installed(cpv) else self.pvar.portdb ++ ++ if add_cache_keys: ++ keys.extend(list(db._aux_cache_keys)) + + if in_dict: +- return dict(izip(keys, aux_get(cpv, keys))) ++ return dict(izip(keys, db.aux_get(cpv, keys))) + else: +- return aux_get(cpv, keys) ++ return db.aux_get(cpv, keys) + + def _get_size(self, cpv): + ''' +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0008-Remove-useless-instruction.patch b/app-admin/packagekit-base/files/0008-Remove-useless-instruction.patch new file mode 100644 index 0000000..e568727 --- /dev/null +++ b/app-admin/packagekit-base/files/0008-Remove-useless-instruction.patch @@ -0,0 +1,24 @@ +From 775b16156373b08a7bdd50c446d740051db93a8d Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 14:27:08 +0200 +Subject: [PATCH 08/12] Remove useless instruction + +--- + backends/portage/portageBackend.py | 1 - + 1 file changed, 1 deletion(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index fc2d45a..4ca4fb5 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -519,7 +519,6 @@ class PackageKitPortageMixin(object): + size = self._get_metadata(cpv, ["SIZE"])[0] + size = int(size) if size else 0 + else: +- self + metadata = self._get_metadata(cpv, ["IUSE", "SLOT"], in_dict=True) + + package = _emerge.Package.Package( +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0009-Cosmetics.patch b/app-admin/packagekit-base/files/0009-Cosmetics.patch new file mode 100644 index 0000000..e3bf255 --- /dev/null +++ b/app-admin/packagekit-base/files/0009-Cosmetics.patch @@ -0,0 +1,800 @@ +From 53ff394fdadfccc90f24d35f3c6333d853825a74 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 14:26:20 +0200 +Subject: [PATCH 09/12] Cosmetics + +--- + backends/portage/portageBackend.py | 348 ++++++++++++++++++++----------------- + 1 file changed, 191 insertions(+), 157 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 4ca4fb5..9775466 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -84,8 +84,8 @@ class PortagePackageGroups(dict): + 'name': "Office", + 'description': "Applications used in office environments", + 'categories': ['app-office', 'app-pda', 'app-mobilephone', +- 'app-cdr', 'app-antivirus', 'app-laptop', 'mail-', +- ], ++ 'app-cdr', 'app-antivirus', 'app-laptop', ++ 'mail-'], + }, + 'development': { + 'name': "Development", +@@ -104,56 +104,47 @@ class PortagePackageGroups(dict): + }, + 'gnome': { + 'name': "GNOME Desktop", +- 'description': \ +- "Applications and libraries for the GNOME Desktop", ++ 'description': "Applications and libraries for the GNOME Desktop", + 'categories': ['gnome-'], + }, + 'kde': { + 'name': "KDE Desktop", +- 'description': \ +- "Applications and libraries for the KDE Desktop", ++ 'description': "Applications and libraries for the KDE Desktop", + 'categories': ['kde-'], + }, + 'xfce': { + 'name': "XFCE Desktop", +- 'description': \ +- "Applications and libraries for the XFCE Desktop", ++ 'description': "Applications and libraries for the XFCE Desktop", + 'categories': ['xfce-'], + }, + 'lxde': { + 'name': "LXDE Desktop", +- 'description': \ +- "Applications and libraries for the LXDE Desktop", ++ 'description': "Applications and libraries for the LXDE Desktop", + 'categories': ['lxde-'], + }, + 'multimedia': { + 'name': "Multimedia", +- 'description': \ +- "Applications and libraries for Multimedia", ++ 'description': "Applications and libraries for Multimedia", + 'categories': ['media-'], + }, + 'networking': { + 'name': "Networking", +- 'description': \ +- "Applications and libraries for Networking", ++ 'description': "Applications and libraries for Networking", + 'categories': ['net-', 'www-'], + }, + 'science': { + 'name': "Science", +- 'description': \ +- "Scientific applications and libraries", ++ 'description': "Scientific applications and libraries", + 'categories': ['sci-'], + }, + 'security': { + 'name': "Security", +- 'description': \ +- "Security orientend applications", ++ 'description': "Security orientend applications", + 'categories': ['app-antivirus', 'net-analyzer', 'net-firewall'], + }, + 'x11': { + 'name': "X11", +- 'description': \ +- "Applications and libraries for X11", ++ 'description': "Applications and libraries for X11", + 'categories': ['x11-'], + }, + } +@@ -179,7 +170,7 @@ class PortageBridge(): + + def update(self): + self.settings, self.trees, self.mtimedb = \ +- _emerge.actions.load_emerge_config() ++ _emerge.actions.load_emerge_config() + self.vardb = self.trees[self.settings['ROOT']]['vartree'].dbapi + self.portdb = self.trees[self.settings['ROOT']]['porttree'].dbapi + self.root_config = self.trees[self.settings['ROOT']]['root_config'] +@@ -299,8 +290,8 @@ class PackageKitPortageMixin(object): + Return PackageKit group belonging to given Portage package. + """ + category = portage.versions.catsplit(cp)[0] +- group_data = [key for key, data in self._get_portage_groups().items() \ +- if category in data['categories']] ++ group_data = [key for key, data in self._get_portage_groups().items() ++ if category in data['categories']] + try: + generic_group_name = group_data.pop(0) + except IndexError: +@@ -341,9 +332,12 @@ class PackageKitPortageMixin(object): + def _get_real_license_str(self, cpv, metadata): + # use conditionals info (w/ USE) in LICENSE and remove || + ebuild_settings = self._get_ebuild_settings(cpv, metadata) +- license = set(portage.flatten(portage.dep.use_reduce( +- portage.dep.paren_reduce(metadata["LICENSE"]), +- uselist=ebuild_settings.get("USE", "").split()))) ++ license = set(portage.flatten( ++ portage.dep.use_reduce( ++ portage.dep.paren_reduce(metadata["LICENSE"]), ++ uselist=ebuild_settings.get("USE", "").split() ++ ) ++ )) + license.discard('||') + return ' '.join(license) + +@@ -353,10 +347,12 @@ class PackageKitPortageMixin(object): + self.pvar.settings.get('CONFIG_PROTECT', '').split())) + + if result: +- message = "Some configuration files need updating." +- message += ";You should use Gentoo's tools to update them (dispatch-conf)" +- message += ";If you can't do that, ask your system administrator." +- self.message(MESSAGE_CONFIG_FILES_CHANGED, message) ++ self.message( ++ MESSAGE_CONFIG_FILES_CHANGED, ++ "Some configuration files need updating." ++ ";You should use Gentoo's tools to update them (dispatch-conf)" ++ ";If you can't do that, ask your system administrator." ++ ) + + def _get_restricted_fetch_files(self, cpv, metadata): + ''' +@@ -374,28 +370,32 @@ class PackageKitPortageMixin(object): + ebuild_settings = self._get_ebuild_settings(cpv, metadata) + + files = self.pvar.portdb.getFetchMap(cpv, +- ebuild_settings['USE'].split()) ++ ebuild_settings['USE'].split()) + + for f in files: + file_path = os.path.join(ebuild_settings["DISTDIR"], f) + if not os.access(file_path, os.F_OK): + missing_files.append([file_path, files[f]]) + +- if len(missing_files) > 0: +- return missing_files +- +- return None ++ return missing_files if missing_files else None + + def _check_fetch_restrict(self, packages_list): +- for p in packages_list: +- if 'fetch' in p.metadata['RESTRICT']: +- files = self._get_restricted_fetch_files(p.cpv, p.metadata) +- if files: +- message = "Package %s can't download some files." % p.cpv +- message += ";Please, download manually the followonig file(s):" +- for x in files: +- message += ";- %s then copy it to %s" % (' '.join(x[1]), x[0]) +- self.error(ERROR_RESTRICTED_DOWNLOAD, message) ++ for pkg in packages_list: ++ if 'fetch' not in pkg.metadata['RESTRICT']: ++ continue ++ ++ files = self._get_restricted_fetch_files(pkg.cpv, pkg.metadata) ++ if files: ++ message = ( ++ "Package {0} can't download some files." ++ ";Please, download manually the following file(s): " ++ ).format(pkg.cpv) ++ message += ''.join([ ++ ";- {0} then copy it to {1}" ++ .format(' '.join(file_info[1]), file_info[0]) ++ for file_info in files ++ ]) ++ self.error(ERROR_RESTRICTED_DOWNLOAD, message) + + def _elog_listener(self, settings, key, logentries, fulltext): + ''' +@@ -440,12 +440,12 @@ class PackageKitPortageMixin(object): + # EAPI-2 compliant (at least) + # 'other' phase is ignored except this one, every phase should be there + if self._error_phase in ("setup", "unpack", "prepare", "configure", +- "nofetch", "config", "info"): ++ "nofetch", "config", "info"): + error_type = ERROR_PACKAGE_FAILED_TO_CONFIGURE + elif self._error_phase in ("compile", "test"): + error_type = ERROR_PACKAGE_FAILED_TO_BUILD + elif self._error_phase in ("install", "preinst", "postinst", +- "package"): ++ "package"): + error_type = ERROR_PACKAGE_FAILED_TO_INSTALL + elif self._error_phase in ("prerm", "postrm"): + error_type = ERROR_PACKAGE_FAILED_TO_REMOVE +@@ -457,8 +457,8 @@ class PackageKitPortageMixin(object): + def _get_file_list(self, cpv): + cat, pv = portage.versions.catsplit(cpv) + db = portage.dblink(cat, pv, self.pvar.settings['ROOT'], +- self.pvar.settings, treetype="vartree", +- vartree=self.pvar.vardb) ++ self.pvar.settings, treetype="vartree", ++ vartree=self.pvar.vardb) + + contents = db.getcontents() + return contents.keys() if contents else [] +@@ -470,7 +470,7 @@ class PackageKitPortageMixin(object): + returns -1 if cpv1 < cpv2 + ''' + return portage.versions.pkgcmp(portage.versions.pkgsplit(cpv1), +- portage.versions.pkgsplit(cpv2)) ++ portage.versions.pkgsplit(cpv2)) + + def _get_newest_cpv(self, cpv_list, installed): + newer = "" +@@ -491,7 +491,7 @@ class PackageKitPortageMixin(object): + + return newer + +- def _get_metadata(self, cpv, keys, in_dict = False, add_cache_keys = False): ++ def _get_metadata(self, cpv, keys, in_dict=False, add_cache_keys=False): + ''' + This function returns required metadata. + If in_dict is True, metadata is returned in a dict object. +@@ -522,15 +522,15 @@ class PackageKitPortageMixin(object): + metadata = self._get_metadata(cpv, ["IUSE", "SLOT"], in_dict=True) + + package = _emerge.Package.Package( +- type_name="ebuild", +- built=False, +- installed=False, +- root_config=self.pvar.root_config, +- cpv=cpv, +- metadata=metadata) +- ++ type_name="ebuild", ++ built=False, ++ installed=False, ++ root_config=self.pvar.root_config, ++ cpv=cpv, ++ metadata=metadata ++ ) + fetch_file = self.pvar.portdb.getfetchsizes(package[2], +- package.use.enabled) ++ package.use.enabled) + size = sum(fetch_file) + + return size +@@ -668,10 +668,11 @@ class PackageKitPortageMixin(object): + + if len(ret) < 4: + self.error(ERROR_PACKAGE_ID_INVALID, +- "The package id %s does not contain 4 fields" % pkgid) ++ "The package id %s does not contain 4 fields" % pkgid) + if '/' not in ret[0]: + self.error(ERROR_PACKAGE_ID_INVALID, +- "The first field of the package id must contain a category") ++ "The first field of the package id must contain" ++ " a category") + + # remove slot info from version field + version = ret[1].split(':')[0] +@@ -683,8 +684,9 @@ class PackageKitPortageMixin(object): + Transform the cpv (portage) to a package id (packagekit) + ''' + package, version, rev = portage.versions.pkgsplit(cpv) +- pkg_keywords, repo, slot = self._get_metadata(cpv, +- ["KEYWORDS", "repository", "SLOT"]) ++ pkg_keywords, repo, slot = self._get_metadata( ++ cpv, ["KEYWORDS", "repository", "SLOT"] ++ ) + + # filter accepted keywords + keywords = list(set(pkg_keywords.split()).intersection( +@@ -694,7 +696,8 @@ class PackageKitPortageMixin(object): + # if no keywords, check in package.keywords + if not keywords: + key_dict = self.pvar.settings.pkeywordsdict.get( +- portage.dep.dep_getkey(cpv)) ++ portage.dep.dep_getkey(cpv) ++ ) + if key_dict: + for keys in key_dict.values(): + keyword.extend(keys) +@@ -702,7 +705,7 @@ class PackageKitPortageMixin(object): + if not keywords: + keywords.append("no keywords") + self.message(MESSAGE_UNKNOWN, +- "No keywords have been found for %s" % cpv) ++ "No keywords have been found for %s" % cpv) + + # don't want to see -r0 + if rev != "r0": +@@ -728,19 +731,23 @@ class PackageKitPortageMixin(object): + myopts["--selective"] = True + myopts["--deep"] = True + +- myparams = _emerge.create_depgraph_params.create_depgraph_params( +- myopts, "remove") ++ myparams = _emerge.create_depgraph_params \ ++ .create_depgraph_params(myopts, "remove") + depgraph = _emerge.depgraph.depgraph(self.pvar.settings, +- self.pvar.trees, myopts, myparams, None) ++ self.pvar.trees, myopts, ++ myparams, None) + + # TODO: atm, using FILTER_INSTALLED because it's quicker + # and we don't want to manage non-installed packages + for cp in self._get_all_cp([FILTER_INSTALLED]): + for cpv in self._get_all_cpv(cp, [FILTER_INSTALLED]): + depgraph._dynamic_config._dep_stack.append( +- _emerge.Dependency.Dependency( +- atom=portage.dep.Atom('=' + cpv), +- root=self.pvar.settings["ROOT"], parent=None)) ++ _emerge.Dependency.Dependency( ++ atom=portage.dep.Atom('=' + cpv), ++ root=self.pvar.settings["ROOT"], ++ parent=None ++ ) ++ ) + + if not depgraph._complete_graph(): + self.error(ERROR_INTERNAL_ERROR, "Error when generating depgraph") +@@ -851,23 +858,24 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + cpv = self._id_to_cpv(pkg) + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + cpv_input.append('=' + cpv) + + myopts = {} + myopts["--selective"] = True + myopts["--deep"] = True +- myparams = _emerge.create_depgraph_params.create_depgraph_params( +- myopts, "") ++ myparams = _emerge.create_depgraph_params \ ++ .create_depgraph_params(myopts, "") + +- depgraph = _emerge.depgraph.depgraph( +- self.pvar.settings, self.pvar.trees, myopts, myparams, None) ++ depgraph = _emerge.depgraph.depgraph(self.pvar.settings, ++ self.pvar.trees, myopts, ++ myparams, None) + retval, fav = depgraph.select_files(cpv_input) + + if not retval: + self.error(ERROR_DEP_RESOLUTION_FAILED, +- "Wasn't able to get dependency graph") ++ "Wasn't able to get dependency graph") + return + + def _add_children_to_list(cpv_list, node): +@@ -937,18 +945,23 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + +- metadata = self._get_metadata(cpv, +- ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", "SLOT"], +- in_dict=True) +- license = self._get_real_license_str(cpv, metadata) ++ metadata = self._get_metadata( ++ cpv, ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", "SLOT"], ++ in_dict=True ++ ) + +- self.details(self._cpv_to_id(cpv), '', license, ++ self.details( ++ self._cpv_to_id(cpv), ++ '', ++ self._get_real_license_str(cpv, metadata), + self._get_pk_group(cpv), +- metadata["DESCRIPTION"], metadata["HOMEPAGE"], +- self._get_size(cpv)) ++ metadata["DESCRIPTION"], ++ metadata["HOMEPAGE"], ++ self._get_size(cpv) ++ ) + + pkg_processed += 100.0 + self.percentage(int(pkg_processed/nb_pkg)) +@@ -968,19 +981,16 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + + if not self._is_installed(cpv): + self.error(ERROR_CANNOT_GET_FILELIST, +- "get-files is only available for installed packages") ++ "get-files is only available for installed" ++ " packages") + continue + +- files = self._get_file_list(cpv) +- files = sorted(files) +- files = ";".join(files) +- +- self.files(pkg, files) ++ self.files(pkg, ';'.join(sorted(self._get_file_list(cpv)))) + + pkg_processed += 100.0 + self.percentage(int(pkg_processed/nb_pkg)) +@@ -1055,7 +1065,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if FILTER_NOT_INSTALLED in filters: + self.error(ERROR_CANNOT_GET_REQUIRES, +- "required-by returns only installed packages at the moment") ++ "required-by returns only installed packages" ++ " at the moment") + return + + for pkg in pkgs: +@@ -1063,11 +1074,12 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + if not self._is_installed(cpv): + self.error(ERROR_CANNOT_GET_REQUIRES, +- "required-by is only available for installed packages at the moment") ++ "required-by is only available for installed" ++ " packages at the moment") + continue + + cpv_input.append(cpv) +@@ -1105,7 +1117,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + cpv = self._id_to_cpv(pkg) + + if not self.pvar.portdb.cpv_exists(cpv): +- self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, "could not find %s" % pkg) ++ self.message(MESSAGE_COULD_NOT_FIND_PACKAGE, ++ "could not find %s" % pkg) + + for cpv in self.pvar.vardb.match(portage.versions.pkgsplit(cpv)[0]): + updates.append(cpv) +@@ -1117,9 +1130,11 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + issued = "" + updated = "" + +- self.update_detail(pkg, updates, obsoletes, vendor_url, bugzilla_url, +- cve_url, "none", "No update text", "No ChangeLog", +- UPDATE_STATE_STABLE, issued, updated) ++ self.update_detail( ++ pkg, updates, obsoletes, vendor_url, bugzilla_url, cve_url, ++ "none", "No update text", "No ChangeLog", UPDATE_STATE_STABLE, ++ issued, updated ++ ) + + def get_updates(self, filters): + # NOTES: +@@ -1150,7 +1165,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # get system and world packages + for s in ["system", "world"]: + sets = self._get_internal_package_set_class()( +- initial_atoms=self.pvar.root_config.setconfig.getSetAtoms(s)) ++ initial_atoms=self.pvar.root_config.setconfig.getSetAtoms(s) ++ ) + for atom in sets: + update_candidates.append(atom.cp) + +@@ -1214,8 +1230,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + cpv_downgra[cp] = dict_down + + # get security updates +- for atom in self._get_internal_package_set_class()( +- initial_atoms=self.pvar.root_config.setconfig.getSetAtoms("security")): ++ for atom in self._get_internal_package_set_class( ++ initial_atoms=self.pvar.root_config.setconfig ++ .getSetAtoms("security") ++ ): + # send update message and remove atom from cpv_updates + if atom.cp in cpv_updates: + slot = self._get_metadata(atom.cpv, ["SLOT"])[0] +@@ -1269,12 +1287,12 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + + if self._is_installed(cpv): + self.error(ERROR_PACKAGE_ALREADY_INSTALLED, +- "Package %s is already installed" % pkg) ++ "Package %s is already installed" % pkg) + continue + + cpv_list.append('=' + cpv) +@@ -1283,7 +1301,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # but better to show it after important errors + if only_trusted: + self.error(ERROR_MISSING_GPG_SIGNATURE, +- "Portage backend does not support GPG signature") ++ "Portage backend does not support GPG signature") + return + + # creating installation depgraph +@@ -1292,17 +1310,18 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + myopts['--fetchonly'] = True + + favorites = [] +- myparams = _emerge.create_depgraph_params.create_depgraph_params( +- myopts, "") ++ myparams = _emerge.create_depgraph_params \ ++ .create_depgraph_params(myopts, "") + + self.status(STATUS_DEP_RESOLVE) + + depgraph = _emerge.depgraph.depgraph(self.pvar.settings, +- self.pvar.trees, myopts, myparams, None) ++ self.pvar.trees, myopts, ++ myparams, None) + retval, favorites = depgraph.select_files(cpv_list) + if not retval: + self.error(ERROR_DEP_RESOLUTION_FAILED, +- "Wasn't able to get dependency graph") ++ "Wasn't able to get dependency graph") + return + + # check fetch restrict, can stop the function via error signal +@@ -1319,9 +1338,11 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + try: + self._block_output() + # compiling/installing +- mergetask = _emerge.Scheduler.Scheduler(self.pvar.settings, +- self.pvar.trees, self.pvar.mtimedb, myopts, None, +- depgraph.altlist(), favorites, depgraph.schedulerGraph()) ++ mergetask = _emerge.Scheduler.Scheduler( ++ self.pvar.settings, self.pvar.trees, self.pvar.mtimedb, ++ myopts, None, depgraph.altlist(), favorites, ++ depgraph.schedulerGraph() ++ ) + rval = mergetask.merge() + finally: + self._unblock_output() +@@ -1354,8 +1375,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + installed_layman_db = layman.db.DB(conf) + + if force: +- timestamp_path = os.path.join( +- self.pvar.settings["PORTDIR"], "metadata", "timestamp.chk") ++ timestamp_path = os.path.join(self.pvar.settings["PORTDIR"], ++ "metadata", "timestamp.chk") + if os.access(timestamp_path, os.F_OK): + os.remove(timestamp_path) + +@@ -1364,7 +1385,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + for overlay in installed_layman_db.overlays.keys(): + installed_layman_db.sync(overlay) + _emerge.actions.action_sync(self.pvar.settings, self.pvar.trees, +- self.pvar.mtimedb, myopts, "") ++ self.pvar.mtimedb, myopts, "") + except: + self.error(ERROR_INTERNAL_ERROR, traceback.format_exc()) + finally: +@@ -1397,18 +1418,22 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_PACKAGE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + + if not self._is_installed(cpv): + self.error(ERROR_PACKAGE_NOT_INSTALLED, +- "Package %s is not installed" % pkg) ++ "Package %s is not installed" % pkg) + continue + + # stop removal if a package is in the system set + if portage.versions.pkgsplit(cpv)[0] in system_packages: +- self.error(ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE, +- "Package %s is a system package. If you really want to remove it, please use portage" % pkg) ++ self.error( ++ ERROR_CANNOT_REMOVE_SYSTEM_PACKAGE, ++ "Package %s is a system package. " ++ "If you really want to remove it, please use portage" % ++ pkg ++ ) + continue + + cpv_list.append(cpv) +@@ -1416,41 +1441,45 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # backend do not implement autoremove + if autoremove: + self.message(MESSAGE_AUTOREMOVE_IGNORED, +- "Portage backend do not implement autoremove option") ++ "Portage backend do not implement autoremove option") + + # get packages needing candidates for removal +- required_packages = self._get_required_packages(cpv_list, recursive=True) ++ required_packages = self._get_required_packages(cpv_list, ++ recursive=True) + + # if there are required packages, allowdep must be on + if required_packages and not allowdep: + self.error(ERROR_DEP_RESOLUTION_FAILED, +- "Could not perform remove operation has packages are needed by other packages") ++ "Could not perform remove operation has packages " ++ "are needed by other packages") + return + + # first, we add required packages + for p in required_packages: + package = _emerge.Package.Package( +- type_name=p.type_name, +- built=p.built, +- installed=p.installed, +- root_config=p.root_config, +- cpv=p.cpv, +- metadata=p.metadata, +- operation='uninstall') ++ type_name=p.type_name, ++ built=p.built, ++ installed=p.installed, ++ root_config=p.root_config, ++ cpv=p.cpv, ++ metadata=p.metadata, ++ operation='uninstall' ++ ) + packages.append(package) + + # and now, packages we want really to remove + for cpv in cpv_list: + metadata = self._get_metadata(cpv, [], +- in_dict=True, add_cache_keys=True) ++ in_dict=True, add_cache_keys=True) + package = _emerge.Package.Package( +- type_name="ebuild", +- built=True, +- installed=True, +- root_config=self.pvar.root_config, +- cpv=cpv, +- metadata=metadata, +- operation="uninstall") ++ type_name="ebuild", ++ built=True, ++ installed=True, ++ root_config=self.pvar.root_config, ++ cpv=cpv, ++ metadata=metadata, ++ operation="uninstall" ++ ) + packages.append(package) + + if simulate: +@@ -1467,9 +1496,11 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # now, we can remove + try: + self._block_output() +- mergetask = _emerge.Scheduler.Scheduler(self.pvar.settings, +- self.pvar.trees, self.pvar.mtimedb, mergelist=packages, +- myopts={}, spinner=None, favorites=favorites, digraph=None) ++ mergetask = _emerge.Scheduler.Scheduler( ++ self.pvar.settings, self.pvar.trees, self.pvar.mtimedb, ++ mergelist=packages, myopts={}, spinner=None, ++ favorites=favorites, digraph=None ++ ) + rval = mergetask.merge() + finally: + self._unblock_output() +@@ -1495,7 +1526,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + if repoid == 'gentoo': + if not enable: + self.error(ERROR_CANNOT_DISABLE_REPOSITORY, +- "gentoo repository can't be disabled") ++ "gentoo repository can't be disabled") + return + + conf = layman.config.BareConfig() +@@ -1506,7 +1537,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # check now for repoid so we don't have to do it after + if repoid not in available_layman_db.overlays.keys(): + self.error(ERROR_REPO_NOT_FOUND, +- "Repository %s was not found" % repoid) ++ "Repository %s was not found" % repoid) + return + + # disabling (removing) a db +@@ -1516,7 +1547,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + installed_layman_db.delete(installed_layman_db.select(repoid)) + except Exception, e: + self.error(ERROR_INTERNAL_ERROR, +- "Failed to disable repository "+repoid+" : "+str(e)) ++ "Failed to disable repository "+repoid+" : "+str(e)) + return + + # enabling (adding) a db +@@ -1530,7 +1561,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + except Exception, e: + self._unblock_output() + self.error(ERROR_INTERNAL_ERROR, +- "Failed to enable repository "+repoid+" : "+str(e)) ++ "Failed to enable repository "+repoid+" : "+str(e)) + return + + def resolve(self, filters, pkgs): +@@ -1581,10 +1612,10 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # and newest filter could be alterated + for cpv in self._get_all_cpv(cp, filters, filter_newest=False): + match = True +- metadata = self._get_metadata(cpv, +- ["DESCRIPTION", "HOMEPAGE", "IUSE", +- "LICENSE", "repository", "SLOT"], +- in_dict=True) ++ metadata = self._get_metadata( ++ cpv, ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", ++ "repository", "SLOT"], in_dict=True ++ ) + # update LICENSE to correspond to system settings + metadata["LICENSE"] = self._get_real_license_str(cpv, metadata) + for s in search_list: +@@ -1621,7 +1652,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if FILTER_NOT_INSTALLED in filters: + self.error(ERROR_CANNOT_GET_FILELIST, +- "search-file isn't available with ~installed filter") ++ "search-file isn't available with ~installed filter") + return + + cpv_list = self.pvar.vardb.cpv_all() +@@ -1759,7 +1790,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + + if not self._is_cpv_valid(cpv): + self.error(ERROR_UPDATE_NOT_FOUND, +- "Package %s was not found" % pkg) ++ "Package %s was not found" % pkg) + continue + + cpv_list.append('=' + cpv) +@@ -1768,7 +1799,7 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + # but better to show it after important errors + if only_trusted: + self.error(ERROR_MISSING_GPG_SIGNATURE, +- "Portage backend does not support GPG signature") ++ "Portage backend does not support GPG signature") + return + + # creating update depgraph +@@ -1776,17 +1807,18 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + if only_download: + myopts['--fetchonly'] = True + favorites = [] +- myparams = _emerge.create_depgraph_params.create_depgraph_params( +- myopts, "") ++ myparams = _emerge.create_depgraph_params \ ++ .create_depgraph_params(myopts, "") + + self.status(STATUS_DEP_RESOLVE) + + depgraph = _emerge.depgraph.depgraph(self.pvar.settings, +- self.pvar.trees, myopts, myparams, None) ++ self.pvar.trees, myopts, ++ myparams, None) + retval, favorites = depgraph.select_files(cpv_list) + if not retval: + self.error(ERROR_DEP_RESOLUTION_FAILED, +- "Wasn't able to get dependency graph") ++ "Wasn't able to get dependency graph") + return + + # check fetch restrict, can stop the function via error signal +@@ -1803,9 +1835,11 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + try: + self._block_output() + # compiling/installing +- mergetask = _emerge.Scheduler.Scheduler(self.pvar.settings, +- self.pvar.trees, self.pvar.mtimedb, myopts, None, +- depgraph.altlist(), favorites, depgraph.schedulerGraph()) ++ mergetask = _emerge.Scheduler.Scheduler( ++ self.pvar.settings, self.pvar.trees, self.pvar.mtimedb, ++ myopts, None, depgraph.altlist(), favorites, ++ depgraph.schedulerGraph() ++ ) + rval = mergetask.merge() + finally: + self._unblock_output() +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0010-Add-helper-to-change-portage-settings.patch b/app-admin/packagekit-base/files/0010-Add-helper-to-change-portage-settings.patch new file mode 100644 index 0000000..af81129 --- /dev/null +++ b/app-admin/packagekit-base/files/0010-Add-helper-to-change-portage-settings.patch @@ -0,0 +1,73 @@ +From ecd21674a814926e31ad70613f927c73f19c3d3d Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 15:32:53 +0200 +Subject: [PATCH 10/12] Add helper to change portage settings + +--- + backends/portage/portageBackend.py | 39 +++++++++++++++++--------------------- + 1 file changed, 17 insertions(+), 22 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 9775466..1a6d855 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -175,21 +175,24 @@ class PortageBridge(): + self.portdb = self.trees[self.settings['ROOT']]['porttree'].dbapi + self.root_config = self.trees[self.settings['ROOT']]['root_config'] + +- # doing all the changes to settings ++ self.apply_settings({ ++ # we don't want interactive ebuilds ++ 'ACCEPT_PROPERTIES': '-interactive', ++ # do not log with mod_echo (cleanly prevent some outputs) ++ 'PORTAGE_ELOG_SYSTEM': ' '.join([ ++ elog for elog in self.settings["PORTAGE_ELOG_SYSTEM"].split() ++ if elog != 'echo' ++ ]), ++ }) ++ ++ def apply_settings(self, mapping): ++ """Set portage settings.""" + self.settings.unlock() + +- # we don't want interactive ebuilds +- self.settings["ACCEPT_PROPERTIES"] = "-interactive" +- self.settings.backup_changes("ACCEPT_PROPERTIES") ++ for key, value in mapping.items(): ++ self.settings[key] = value ++ self.settings.backup_changes(key) + +- # do not log with mod_echo (cleanly prevent some outputs) +- self.settings["PORTAGE_ELOG_SYSTEM"] = ' '.join([ +- elog for elog in self.settings["PORTAGE_ELOG_SYSTEM"].split() +- if elog != 'echo' +- ]) +- self.settings.backup_changes("PORTAGE_ELOG_SYSTEM") +- +- # finally, regenerate settings and lock them again + self.settings.regenerate() + self.settings.lock() + +@@ -560,17 +563,9 @@ class PackageKitPortageMixin(object): + licenses = "* -" + free_licenses + backup_license = self.pvar.settings["ACCEPT_LICENSE"] + +- self.pvar.settings.unlock() +- self.pvar.settings["ACCEPT_LICENSE"] = licenses +- self.pvar.settings.backup_changes("ACCEPT_LICENSE") +- self.pvar.settings.regenerate() +- ++ self.pvar.apply_settings({'ACCEPT_LICENSE': licences}) + cpv_list = filter(_has_validLicense, cpv_list) +- +- self.pvar.settings["ACCEPT_LICENSE"] = backup_license +- self.pvar.settings.backup_changes("ACCEPT_LICENSE") +- self.pvar.settings.regenerate() +- self.pvar.settings.lock() ++ self.pvar.apply_settings({'ACCEPT_LICENSE': backup_licence}) + + return cpv_list + +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0011-Remove-compatibility-with-older-portage.patch b/app-admin/packagekit-base/files/0011-Remove-compatibility-with-older-portage.patch new file mode 100644 index 0000000..222f9bf --- /dev/null +++ b/app-admin/packagekit-base/files/0011-Remove-compatibility-with-older-portage.patch @@ -0,0 +1,77 @@ +From 6b8db81b43eaba3e331725227252f9d363d1b695 Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 15:39:07 +0200 +Subject: [PATCH 11/12] Remove compatibility with older portage + +--- + backends/portage/portageBackend.py | 26 ++++++++------------------ + 1 file changed, 8 insertions(+), 18 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 1a6d855..9ce2b79 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -50,6 +50,7 @@ import _emerge.stdout_spinner + import portage + import portage.dep + import portage.versions ++from portage._sets.base import InternalPackageSet + from portage.exception import InvalidAtom + + # NOTES: +@@ -319,13 +320,6 @@ class PackageKitPortageMixin(object): + settings.setcpv(cpv, mydb=metadata) + return settings + +- def _get_internal_package_set_class(self): +- try: +- from portage._sets.base import InternalPackageSet +- except ImportError: +- from portage.sets.base import InternalPackageSet +- return InternalPackageSet +- + def _is_installed(self, cpv): + return self.pvar.vardb.cpv_exists(cpv) + +@@ -1158,10 +1152,9 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + cpv_downgra = {} + + # get system and world packages +- for s in ["system", "world"]: +- sets = self._get_internal_package_set_class()( +- initial_atoms=self.pvar.root_config.setconfig.getSetAtoms(s) +- ) ++ for pkg_set in ["system", "world"]: ++ sets = InternalPackageSet(initial_atoms=self.pvar.root_config ++ .setconfig.getSetAtoms(pkg_set)) + for atom in sets: + update_candidates.append(atom.cp) + +@@ -1225,10 +1218,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + cpv_downgra[cp] = dict_down + + # get security updates +- for atom in self._get_internal_package_set_class( +- initial_atoms=self.pvar.root_config.setconfig +- .getSetAtoms("security") +- ): ++ for atom in InternalPackageSet(initial_atoms=self.pvar.root_config ++ .setconfig.getSetAtoms("security")): + # send update message and remove atom from cpv_updates + if atom.cp in cpv_updates: + slot = self._get_metadata(atom.cpv, ["SLOT"])[0] +@@ -1402,9 +1393,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + system_packages = [] + + # get system packages +- sets = self._get_internal_package_set_class()( +- initial_atoms=self.pvar.root_config.setconfig.getSetAtoms("system")) +- for atom in sets: ++ for atom in InternalPackageSet(initial_atoms=self.pvar.root_config ++ .setconfig.getSetAtoms("system")): + system_packages.append(atom.cp) + + # create cpv_list +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/0012-Retrieve-EAPI-and-KEYWORDS-before-calling-setcpv-met.patch b/app-admin/packagekit-base/files/0012-Retrieve-EAPI-and-KEYWORDS-before-calling-setcpv-met.patch new file mode 100644 index 0000000..08c7626 --- /dev/null +++ b/app-admin/packagekit-base/files/0012-Retrieve-EAPI-and-KEYWORDS-before-calling-setcpv-met.patch @@ -0,0 +1,36 @@ +From c08ca43ca45d55471f014dee93592b5448950aea Mon Sep 17 00:00:00 2001 +From: Gilles Dartiguelongue <e...@gentoo.org> +Date: Sun, 3 May 2015 17:54:59 +0200 +Subject: [PATCH 12/12] Retrieve EAPI and KEYWORDS before calling setcpv method + +--- + backends/portage/portageBackend.py | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/backends/portage/portageBackend.py b/backends/portage/portageBackend.py +index 9ce2b79..79b8449 100755 +--- a/backends/portage/portageBackend.py ++++ b/backends/portage/portageBackend.py +@@ -938,7 +938,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + continue + + metadata = self._get_metadata( +- cpv, ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", "SLOT"], ++ cpv, ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", "SLOT", ++ "EAPI", "KEYWORDS"], + in_dict=True + ) + +@@ -1599,7 +1600,8 @@ class PackageKitPortageBackend(PackageKitPortageMixin, PackageKitBaseBackend): + match = True + metadata = self._get_metadata( + cpv, ["DESCRIPTION", "HOMEPAGE", "IUSE", "LICENSE", +- "repository", "SLOT"], in_dict=True ++ "repository", "SLOT", "EAPI", "KEYWORDS"], ++ in_dict=True + ) + # update LICENSE to correspond to system settings + metadata["LICENSE"] = self._get_real_license_str(cpv, metadata) +-- +2.3.6 + diff --git a/app-admin/packagekit-base/files/packagekit-base-1.0.3-configure.patch b/app-admin/packagekit-base/files/packagekit-base-1.0.3-configure.patch deleted file mode 100644 index 0c5c833..0000000 --- a/app-admin/packagekit-base/files/packagekit-base-1.0.3-configure.patch +++ /dev/null @@ -1,11 +0,0 @@ ---- configure.ac.old 2014-11-25 00:04:23.689888170 +0100 -+++ configure.ac 2014-11-25 00:03:08.041580672 +0100 -@@ -464,7 +464,7 @@ - fi - - have_python_backend="no" --if test x$enable_entropy = xyes -o x$enable_pisi = xyes -o $enable_portage = xyes; then -+if test x$enable_entropy = xyes -o x$enable_pisi = xyes -o x$enable_portage = xyes; then - have_python_backend="yes" - fi - if test x$enable_apt = xyes; then diff --git a/app-admin/packagekit-base/packagekit-base-1.0.3.ebuild b/app-admin/packagekit-base/packagekit-base-1.0.6.ebuild similarity index 83% rename from app-admin/packagekit-base/packagekit-base-1.0.3.ebuild rename to app-admin/packagekit-base/packagekit-base-1.0.6.ebuild index ed33317..db5032c 100644 --- a/app-admin/packagekit-base/packagekit-base-1.0.3.ebuild +++ b/app-admin/packagekit-base/packagekit-base-1.0.6.ebuild @@ -18,13 +18,21 @@ HOMEPAGE="http://www.packagekit.org/" SRC_URI="http://www.freedesktop.org/software/${MY_PN}/releases/${MY_P}.tar.xz" LICENSE="GPL-2" -SLOT="0" +SLOT="0/18" KEYWORDS="~alpha ~amd64 ~arm ~mips ~ppc ~ppc64 ~x86" -IUSE="bash-completion connman cron command-not-found +introspection networkmanager nsplugin entropy systemd test" +IUSE="connman cron command-not-found +introspection networkmanager nsplugin entropy systemd test" REQUIRED_USE="${PYTHON_REQUIRED_USE}" +# While not strictly needed, consolekit is the alternative to systemd-login +# to get current session's user. CDEPEND=" - bash-completion? ( >=app-shells/bash-completion-2.0 ) + >=app-shells/bash-completion-2 + dev-db/sqlite:3 + >=dev-libs/dbus-glib-0.74 + >=dev-libs/glib-2.32.0:2[${PYTHON_USEDEP}] + >=sys-auth/polkit-0.98 + >=sys-apps/dbus-1.3.0 + ${PYTHON_DEPS} connman? ( net-misc/connman ) introspection? ( >=dev-libs/gobject-introspection-0.9.9[${PYTHON_USEDEP}] ) networkmanager? ( >=net-misc/networkmanager-0.6.4 ) @@ -34,26 +42,21 @@ CDEPEND=" >=x11-libs/gtk+-2.14.0:2 x11-libs/pango ) - dev-db/sqlite:3 - >=dev-libs/dbus-glib-0.74 - >=dev-libs/glib-2.32.0:2[${PYTHON_USEDEP}] - >=sys-auth/polkit-0.98 - >=sys-apps/dbus-1.3.0 - ${PYTHON_DEPS} + systemd? ( >=sys-apps/systemd-204 ) " DEPEND="${CDEPEND} - dev-util/gtk-doc-am - nsplugin? ( >=net-misc/npapi-sdk-0.27 ) - systemd? ( >=sys-apps/systemd-204 ) dev-libs/libxslt[${PYTHON_USEDEP}] + >=dev-util/gtk-doc-am-1.11 >=dev-util/intltool-0.35.0 - virtual/pkgconfig sys-devel/gettext + virtual/pkgconfig + nsplugin? ( >=net-misc/npapi-sdk-0.27 ) " RDEPEND="${CDEPEND} - entropy? ( >=sys-apps/entropy-234[${PYTHON_USEDEP}] ) - >=app-portage/layman-1.2.3[${PYTHON_USEDEP}] + >=app-portage/layman-2[${PYTHON_USEDEP}] >=sys-apps/portage-2.2[${PYTHON_USEDEP}] + entropy? ( >=sys-apps/entropy-234[${PYTHON_USEDEP}] ) + !systemd? ( sys-auth/consolekit ) " S="${WORKDIR}/${MY_P}" @@ -62,7 +65,8 @@ RESTRICT="test" src_prepare() { # Fix python backend detection - epatch "${FILESDIR}"/${PN}-1.0.3-configure.patch + # Make portage backend work with newer layman/portage + epatch "${FILESDIR}"/* eautoreconf } @@ -74,11 +78,11 @@ src_configure() { --disable-gtk-module \ --disable-schemas-compile \ --disable-static \ + --enable-bash-completion \ --enable-man-pages \ --enable-nls \ --enable-portage \ --localstatedir=/var \ - $(use_enable bash-completion) \ $(use_enable command-not-found) \ $(use_enable connman) \ $(use_enable cron) \ @@ -87,9 +91,9 @@ src_configure() { $(use_enable networkmanager) \ $(use_enable nsplugin browser-plugin) \ $(use_enable systemd) \ - $(use_enable test local) \ $(use_enable test daemon-tests) \ $(systemd_with_unitdir) + #$(use_enable test local) } src_install() {