commit:     ce16f6c001a867e3a311dcd7712223cf5387424c
Author:     Zac Medico <zmedico <AT> gentoo <DOT> org>
AuthorDate: Mon Oct  5 00:23:01 2015 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Mon Oct  5 01:04:30 2015 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=ce16f6c0

repoman: suppress dependency.badmasked triggered by use.force and use.mask

Add 'minimum-all-ignore-profile' mode to portbapi.xmatch, and use
it to ignore interactions between USE deps, use.force, and use.mask.

Acked-by: Brian Dolbec <dolsen <AT> gentoo.org>

 pym/portage/dbapi/__init__.py | 23 ++++++++++++-----------
 pym/portage/dbapi/porttree.py | 18 +++++++++++-------
 pym/repoman/scanner.py        |  2 +-
 3 files changed, 24 insertions(+), 19 deletions(-)

diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py
index b6745fa..9505384 100644
--- a/pym/portage/dbapi/__init__.py
+++ b/pym/portage/dbapi/__init__.py
@@ -215,7 +215,7 @@ class dbapi(object):
 
                        yield cpv
 
-       def _match_use(self, atom, pkg, metadata):
+       def _match_use(self, atom, pkg, metadata, ignore_profile=False):
                eapi_attrs = _get_eapi_attrs(metadata["EAPI"])
                if eapi_attrs.iuse_effective:
                        iuse_implicit_match = 
self.settings._iuse_effective_match
@@ -261,17 +261,18 @@ class dbapi(object):
                                                return False
 
                elif not self.settings.local_config:
-                       # Check masked and forced flags for repoman.
-                       usemask = self.settings._getUseMask(pkg,
-                               stable=self.settings._parent_stable)
-                       if any(x in usemask for x in atom.use.enabled):
-                               return False
+                       if not ignore_profile:
+                               # Check masked and forced flags for repoman.
+                               usemask = self.settings._getUseMask(pkg,
+                                       stable=self.settings._parent_stable)
+                               if any(x in usemask for x in atom.use.enabled):
+                                       return False
 
-                       useforce = self.settings._getUseForce(pkg,
-                               stable=self.settings._parent_stable)
-                       if any(x in useforce and x not in usemask
-                               for x in atom.use.disabled):
-                               return False
+                               useforce = self.settings._getUseForce(pkg,
+                                       stable=self.settings._parent_stable)
+                               if any(x in useforce and x not in usemask
+                                       for x in atom.use.disabled):
+                                       return False
 
                        # Check unsatisfied use-default deps
                        if atom.use.enabled:

diff --git a/pym/portage/dbapi/porttree.py b/pym/portage/dbapi/porttree.py
index d13fdee..a954de5 100644
--- a/pym/portage/dbapi/porttree.py
+++ b/pym/portage/dbapi/porttree.py
@@ -809,9 +809,9 @@ class portdbapi(dbapi):
                return mylist
 
        def freeze(self):
-               for x in "bestmatch-visible", "cp-list", "match-all", \
-                       "match-all-cpv-only", "match-visible", "minimum-all", \
-                       "minimum-visible":
+               for x in ("bestmatch-visible", "cp-list", "match-all",
+                       "match-all-cpv-only", "match-visible", "minimum-all",
+                       "minimum-all-ignore-profile", "minimum-visible"):
                        self.xcache[x]={}
                self.frozen=1
 
@@ -870,8 +870,9 @@ class portdbapi(dbapi):
                                myval = match_from_list(mydep,
                                        self.cp_list(mykey, mytree=mytree))
 
-               elif level in ("bestmatch-visible", "match-all", 
"match-visible",
-                       "minimum-all", "minimum-visible"):
+               elif level in ("bestmatch-visible", "match-all",
+                       "match-visible", "minimum-all", 
"minimum-all-ignore-profile",
+                       "minimum-visible"):
                        # Find the minimum matching visible version. This is 
optimized to
                        # minimize the number of metadata accesses (improves 
performance
                        # especially in cases where metadata needs to be 
generated).
@@ -881,7 +882,9 @@ class portdbapi(dbapi):
                                mylist = match_from_list(mydep,
                                        self.cp_list(mykey, mytree=mytree))
 
-                       visibility_filter = level not in ("match-all", 
"minimum-all")
+                       ignore_profile = level in 
("minimum-all-ignore-profile",)
+                       visibility_filter = level not in ("match-all",
+                               "minimum-all", "minimum-all-ignore-profile")
                        single_match = level not in ("match-all", 
"match-visible")
                        myval = []
                        aux_keys = list(self._aux_cache_keys)
@@ -922,7 +925,8 @@ class portdbapi(dbapi):
                                                continue
 
                                        if mydep.unevaluated_atom.use is not 
None and \
-                                               not self._match_use(mydep, 
pkg_str, metadata):
+                                               not self._match_use(mydep, 
pkg_str, metadata,
+                                               ignore_profile=ignore_profile):
                                                continue
 
                                        myval.append(pkg_str)

diff --git a/pym/repoman/scanner.py b/pym/repoman/scanner.py
index ff32ac8..0194017 100644
--- a/pym/repoman/scanner.py
+++ b/pym/repoman/scanner.py
@@ -633,7 +633,7 @@ class Scanner(object):
                                                        continue
                                                # we are testing deps for a 
masked package; give it some lee-way
                                                suffix = "masked"
-                                               matchmode = "minimum-all"
+                                               matchmode = 
"minimum-all-ignore-profile"
                                        else:
                                                suffix = ""
                                                matchmode = "minimum-visible"

Reply via email to