From 70bc4db1f288c83fad0645c3b9935840b6b60f84 Mon Sep 17 00:00:00 2001 From: Fabio Erculiani Date: Thu, 18 Oct 2012 21:23:29 +0200 Subject: [PATCH] [entropy.spm] PortagePlugin: strip /* from SLOT metadata When generating Entropy metadata out of Portage xpak information, strip /* from SLOT (a.k.a. the sub-slots part). At the same time, rework get_installed_package_metadata() to return stripped SLOT information to upper layers. Sub-slots have little meaning for Entropy packages, since rebuilds are not its business and soname bumps are already properly detected at dependencies calculation time. However, implementing this feature in future might have sense, for some currently unknown reasons. --- .../interfaces/portage_plugin/__init__.py | 22 +++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py index 04378fddf..af4f4892c 100644 --- a/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py +++ b/lib/entropy/spm/plugins/interfaces/portage_plugin/__init__.py @@ -714,6 +714,19 @@ class PortagePlugin(SpmPlugin): """ Reimplemented from SpmPlugin class. """ + data = self._get_installed_package_metadata( + package, key, root = root) + if key == "SLOT" and data: + # EAPI5, strip /* from SLOT + data = self._strip_slash_from_slot(data) + return data + + def _get_installed_package_metadata(self, package, key, root = None): + """ + Internal version of get_installed_package_metadata(). + This method doesn't do any automagic mangling to returned + data. + """ if root is None: root = etpConst['systemroot'] + os.path.sep vartree = self._get_portage_vartree(root = root) @@ -1320,6 +1333,9 @@ class PortagePlugin(SpmPlugin): uncompressed_env_file, env_var) data[item] = value + # EAPI5 support + data['slot'] = self._strip_slash_from_slot(data['slot']) + #if not data['chost']: # # stupid portage devs and virtual pkgs! # # try to cope @@ -1641,9 +1657,11 @@ class PortagePlugin(SpmPlugin): atoms = self.match_package(cp, match_type = "match-visible") if atoms: for atom in atoms: - slots.add(portdb.aux_get(atom, ["SLOT"])[0]) + slot = portdb.aux_get(atom, ["SLOT"])[0] + slot = self._strip_slash_from_slot(slot) + slots.add(slot) for slot in slots: - visibles.add(cp+":"+slot) + visibles.add(cp + ":" + slot) # now match visibles available = set()