From 9f956ff67ba07c837b13e6f82eddc2165e1b747e Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Mon, 29 Nov 2010 22:08:12 -0800 Subject: dbapi: sync USE match logic with depgraph This changes the IUSE check to use the unevaluated atom, and fixes some missing_enabled/disabled cases. --- pym/portage/dbapi/__init__.py | 29 ++++++++++++++++++++++------- 1 file changed, 22 insertions(+), 7 deletions(-) diff --git a/pym/portage/dbapi/__init__.py b/pym/portage/dbapi/__init__.py index 3803339d5..ae48e53b3 100644 --- a/pym/portage/dbapi/__init__.py +++ b/pym/portage/dbapi/__init__.py @@ -127,7 +127,7 @@ class dbapi(object): cpv_iter = iter(match_from_list(atom, cpv_iter)) if atom.slot: cpv_iter = self._iter_match_slot(atom, cpv_iter) - if atom.use: + if atom.unevaluated_atom.use: cpv_iter = self._iter_match_use(atom, cpv_iter) return cpv_iter @@ -154,7 +154,7 @@ class dbapi(object): use = use.split() iuse = frozenset(x.lstrip('+-') for x in iuse.split()) missing_iuse = False - for x in atom.use.required: + for x in atom.unevaluated_atom.use.required: if x not in iuse and x not in atom.use.missing_enabled \ and x not in atom.use.missing_disabled and not iuse_implicit_match(x): missing_iuse = True @@ -162,11 +162,26 @@ class dbapi(object): if missing_iuse: continue if not self._use_mutable: - if atom.use.enabled.difference(use).difference(atom.use.missing_enabled): - continue - if atom.use.disabled.intersection(use) or \ - atom.use.disabled.difference(iuse).difference(atom.use.missing_disabled): - continue + missing_enabled = atom.use.missing_enabled.difference(iuse) + missing_disabled = atom.use.missing_disabled.difference(iuse) + + if atom.use.enabled: + if atom.use.enabled.intersection(missing_disabled): + continue + need_enabled = atom.use.enabled.difference(use) + if need_enabled: + need_enabled = need_enabled.difference(missing_enabled) + if need_enabled: + continue + + if atom.use.disabled: + if atom.use.disabled.intersection(missing_enabled): + continue + need_disabled = atom.use.disabled.intersection(use) + if need_disabled: + need_disabled = need_disabled.difference(missing_disabled) + if need_disabled: + continue else: # Check masked and forced flags for repoman. mysettings = getattr(self, 'settings', None) -- cgit v1.2.3-1-g7c22