From 0260e8005f5a6883c07d6324c45578ebcb0177fc Mon Sep 17 00:00:00 2001 From: Zac Medico Date: Sat, 21 Nov 2009 04:06:17 +0000 Subject: Optimized the code for bug #288083 and make it handle more cases. Now Package instances have 'visible' and 'masks' attributes, since this information needs to be accessed in more places now. (trunk r14859) svn path=/main/branches/2.1.7/; revision=14870 --- pym/_emerge/Package.py | 81 ++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 79 insertions(+), 2 deletions(-) (limited to 'pym/_emerge/Package.py') diff --git a/pym/_emerge/Package.py b/pym/_emerge/Package.py index dc8b975e6..6ab9be7ad 100644 --- a/pym/_emerge/Package.py +++ b/pym/_emerge/Package.py @@ -22,8 +22,8 @@ class Package(Task): "installed", "metadata", "onlydeps", "operation", "root_config", "type_name", "category", "counter", "cp", "cpv_split", - "inherited", "invalid", "iuse", "mtime", - "pf", "pv_split", "root", "slot", "slot_atom",) + \ + "inherited", "invalid", "iuse", "masks", "mtime", + "pf", "pv_split", "root", "slot", "slot_atom", "visible",) + \ ("_use",) metadata_keys = [ @@ -50,6 +50,83 @@ class Package(Task): self.category, self.pf = portage.catsplit(self.cpv) self.cpv_split = portage.catpkgsplit(self.cpv) self.pv_split = self.cpv_split[1:] + self.masks = self._masks() + self.visible = self._visible(self.masks) + + def _masks(self): + masks = {} + settings = self.root_config.settings + + if self.invalid is not None: + masks['invalid'] = self.invalid + + if not settings._accept_chost(self.cpv, self.metadata): + masks['CHOST'] = self.metadata['CHOST'] + + eapi = self.metadata["EAPI"] + if not portage.eapi_is_supported(eapi): + masks['EAPI.unsupported'] = eapi + if portage._eapi_is_deprecated(eapi): + masks['EAPI.deprecated'] = eapi + + missing_keywords = settings._getMissingKeywords( + self.cpv, self.metadata) + if missing_keywords: + masks['KEYWORDS'] = missing_keywords + + try: + missing_properties = settings._getMissingProperties( + self.cpv, self.metadata) + if missing_properties: + masks['PROPERTIES'] = missing_properties + except portage.exception.InvalidDependString: + # already recorded as 'invalid' + pass + + mask_atom = settings._getMaskAtom(self.cpv, self.metadata) + if mask_atom is not None: + masks['package.mask'] = mask_atom + + system_mask = settings._getProfileMaskAtom( + self.cpv, self.metadata) + if system_mask is not None: + masks['profile.system'] = system_mask + + try: + missing_licenses = settings._getMissingLicenses( + self.cpv, self.metadata) + if missing_licenses: + masks['LICENSE'] = missing_licenses + except portage.exception.InvalidDependString: + # already recorded as 'invalid' + pass + + if not masks: + masks = None + + return masks + + def _visible(self, masks): + + if masks is not None: + + if 'EAPI.unsupported' in masks: + return False + + if not self.installed and ( \ + 'invalid' in masks or \ + 'CHOST' in masks or \ + 'EAPI.deprecated' in masks or \ + 'KEYWORDS' in masks or \ + 'PROPERTIES' in masks): + return False + + if 'package.mask' in masks or \ + 'profile.system' in masks or \ + 'LICENSE' in masks: + return False + + return True def _invalid_metadata(self, msg_type, msg): if self.invalid is None: -- cgit v1.2.3-1-g7c22