diff options
author | Zac Medico <zmedico@gentoo.org> | 2008-10-31 21:37:18 +0000 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2008-10-31 21:37:18 +0000 |
commit | 6e23ac656350976f211728a3f22df29925647202 (patch) | |
tree | ae6af9b12411a473d786cdda47beda10b8a7ea76 /pym/portage/__init__.py | |
parent | 8668b31fdc005d521ce991b1c7542dcc6f385452 (diff) | |
download | portage-6e23ac656350976f211728a3f22df29925647202.tar.gz portage-6e23ac656350976f211728a3f22df29925647202.tar.bz2 portage-6e23ac656350976f211728a3f22df29925647202.zip |
Bug #244947 - Add basic repoman support for checking masked and forced flags
when verifying USE deps. TODO: Add repoman support in dep_check() for
evaluation of conditional USE deps based on forced/masked flags.
masked flags, so that repoman can also
svn path=/main/trunk/; revision=11768
Diffstat (limited to 'pym/portage/__init__.py')
-rw-r--r-- | pym/portage/__init__.py | 86 |
1 files changed, 50 insertions, 36 deletions
diff --git a/pym/portage/__init__.py b/pym/portage/__init__.py index 3e3bc1773..68b7a35ca 100644 --- a/pym/portage/__init__.py +++ b/pym/portage/__init__.py @@ -2001,45 +2001,13 @@ class config(object): if defaults != self.configdict["defaults"].get("USE",""): self.configdict["defaults"]["USE"] = defaults has_changed = True - useforce = [] - pos = 0 - for i in xrange(len(self.profiles)): - cpdict = self.puseforce_list[i].get(cp, None) - if cpdict: - keys = cpdict.keys() - while keys: - best_match = best_match_to_list(cpv_slot, keys) - if best_match: - keys.remove(best_match) - useforce.insert(pos, cpdict[best_match]) - else: - break - del keys - if self.useforce_list[i]: - useforce.insert(pos, self.useforce_list[i]) - pos = len(useforce) - useforce = set(stack_lists(useforce, incremental=True)) + + useforce = self._getUseForce(cpv_slot) if useforce != self.useforce: self.useforce = useforce has_changed = True - usemask = [] - pos = 0 - for i in xrange(len(self.profiles)): - cpdict = self.pusemask_list[i].get(cp, None) - if cpdict: - keys = cpdict.keys() - while keys: - best_match = best_match_to_list(cpv_slot, keys) - if best_match: - keys.remove(best_match) - usemask.insert(pos, cpdict[best_match]) - else: - break - del keys - if self.usemask_list[i]: - usemask.insert(pos, self.usemask_list[i]) - pos = len(usemask) - usemask = set(stack_lists(usemask, incremental=True)) + + usemask = self._getUseMask(cpv_slot) if usemask != self.usemask: self.usemask = usemask has_changed = True @@ -2207,6 +2175,52 @@ class config(object): iuse_implicit.add("bootstrap") return iuse_implicit + def _getUseMask(self, pkg): + cp = getattr(pkg, "cp", None) + if cp is None: + cp = dep_getkey(pkg) + usemask = [] + pos = 0 + for i in xrange(len(self.profiles)): + cpdict = self.pusemask_list[i].get(cp, None) + if cpdict: + keys = cpdict.keys() + while keys: + best_match = best_match_to_list(pkg, keys) + if best_match: + keys.remove(best_match) + usemask.insert(pos, cpdict[best_match]) + else: + break + del keys + if self.usemask_list[i]: + usemask.insert(pos, self.usemask_list[i]) + pos = len(usemask) + return set(stack_lists(usemask, incremental=True)) + + def _getUseForce(self, pkg): + cp = getattr(pkg, "cp", None) + if cp is None: + cp = dep_getkey(pkg) + useforce = [] + pos = 0 + for i in xrange(len(self.profiles)): + cpdict = self.puseforce_list[i].get(cp, None) + if cpdict: + keys = cpdict.keys() + while keys: + best_match = best_match_to_list(pkg, keys) + if best_match: + keys.remove(best_match) + useforce.insert(pos, cpdict[best_match]) + else: + break + del keys + if self.useforce_list[i]: + useforce.insert(pos, self.useforce_list[i]) + pos = len(useforce) + return set(stack_lists(useforce, incremental=True)) + def _getMaskAtom(self, cpv, metadata): """ Take a package and return a matching package.mask atom, or None if no |