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() {

Reply via email to