diff options
Diffstat (limited to 'pym/_emerge/Package.py')
-rw-r--r-- | pym/_emerge/Package.py | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index 18bc2014f..7bf7181ba 100644 --- a/pym/_emerge/Package.py +++ b/pym/_emerge/Package.py @@ -26,8 +26,9 @@ class Package(Task): "root_config", "type_name", "category", "counter", "cp", "cpv_split", "inherited", "iuse", "mtime", - "pf", "root", "slot", "slot_atom", "version") + \ - ("_invalid", "_raw_metadata", "_masks", "_use", "_visible") + "pf", "root", "slot", "slot_abi", "slot_atom", "version") + \ + ("_invalid", "_raw_metadata", "_masks", "_use", + "_validated_atoms", "_visible") metadata_keys = [ "BUILD_TIME", "CHOST", "COUNTER", "DEPEND", "EAPI", @@ -58,6 +59,7 @@ class Package(Task): "SLOT: invalid value: '%s'" % self.metadata["SLOT"]) self.cp = self.cpv.cp self.slot = self.cpv.slot + self.slot_abi = self.cpv.slot_abi # sync metadata with validated repo (may be UNKNOWN_REPO) self.metadata['repository'] = self.cpv.repo if (self.iuse.enabled or self.iuse.disabled) and \ @@ -107,6 +109,17 @@ class Package(Task): self._visible = self._eval_visiblity(self.masks) return self._visible + @property + def validated_atoms(self): + """ + Returns *all* validated atoms from the deps, regardless + of USE conditionals, with USE conditionals inside + atoms left unevaluated. + """ + if self._validated_atoms is None: + self._validate_deps() + return self._validated_atoms + @classmethod def _gen_hash_key(cls, cpv=None, installed=None, onlydeps=None, operation=None, repo_name=None, root_config=None, @@ -160,16 +173,21 @@ class Package(Task): dep_eapi = None dep_valid_flag = None + validated_atoms = [] for k in self._dep_keys: v = self.metadata.get(k) if not v: continue try: - use_reduce(v, eapi=dep_eapi, matchall=True, - is_valid_flag=dep_valid_flag, token_class=Atom) + validated_atoms.extend(use_reduce(v, eapi=dep_eapi, + matchall=True, is_valid_flag=dep_valid_flag, + token_class=Atom, flat=True)) except InvalidDependString as e: self._metadata_exception(k, e) + self._validated_atoms = frozenset(atom for atom in + validated_atoms if isinstance(atom, Atom)) + k = 'PROVIDE' v = self.metadata.get(k) if v: |