diff options
Diffstat (limited to 'pym/_emerge')
-rw-r--r-- | pym/_emerge/EbuildMetadataPhase.py | 46 | ||||
-rw-r--r-- | pym/_emerge/MetadataRegen.py | 6 | ||||
-rw-r--r-- | pym/_emerge/actions.py | 8 | ||||
-rw-r--r-- | pym/_emerge/depgraph.py | 2 |
4 files changed, 35 insertions, 27 deletions
diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py index 7f9bd3bf2..c2d3747f7 100644 --- a/pym/_emerge/EbuildMetadataPhase.py +++ b/pym/_emerge/EbuildMetadataPhase.py @@ -24,8 +24,8 @@ class EbuildMetadataPhase(SubProcess): used to extract metadata from the ebuild. """ - __slots__ = ("cpv", "ebuild_hash", "fd_pipes", - "metadata_callback", "metadata", "portdb", "repo_path", "settings") + \ + __slots__ = ("cpv", "eapi_supported", "ebuild_hash", "fd_pipes", + "metadata", "portdb", "repo_path", "settings") + \ ("_eapi", "_eapi_lineno", "_raw_metadata",) _file_names = ("ebuild",) @@ -33,8 +33,6 @@ class EbuildMetadataPhase(SubProcess): _metadata_fd = 9 def _start(self): - settings = self.settings - settings.setcpv(self.cpv) ebuild_path = self.ebuild_hash.location with io.open(_unicode_encode(ebuild_path, @@ -54,13 +52,15 @@ class EbuildMetadataPhase(SubProcess): self.wait() return - if not portage.eapi_is_supported(parsed_eapi): - self.metadata = self.metadata_callback(self.cpv, - self.repo_path, {'EAPI' : parsed_eapi}, self.ebuild_hash) + self.eapi_supported = portage.eapi_is_supported(parsed_eapi) + if not self.eapi_supported: + self.metadata = {"EAPI": parsed_eapi} self._set_returncode((self.pid, os.EX_OK << 8)) self.wait() return + settings = self.settings + settings.setcpv(self.cpv) settings.configdict['pkg']['EAPI'] = parsed_eapi debug = settings.get("PORTAGE_DEBUG") == "1" @@ -148,28 +148,46 @@ class EbuildMetadataPhase(SubProcess): metadata_lines = _unicode_decode(b''.join(self._raw_metadata), encoding=_encodings['repo.content'], errors='replace').splitlines() + metadata_valid = True if len(portage.auxdbkeys) != len(metadata_lines): # Don't trust bash's returncode if the # number of lines is incorrect. - self.returncode = 1 + metadata_valid = False else: - metadata_valid = True metadata = dict(zip(portage.auxdbkeys, metadata_lines)) parsed_eapi = self._eapi if parsed_eapi is None: parsed_eapi = "0" - if (not metadata["EAPI"] or - portage.eapi_is_supported(metadata["EAPI"])) and \ + self.eapi_supported = \ + portage.eapi_is_supported(metadata["EAPI"]) + if (not metadata["EAPI"] or self.eapi_supported) and \ metadata["EAPI"] != parsed_eapi: self._eapi_invalid(metadata) if 'parse-eapi-ebuild-head' in self.settings.features: metadata_valid = False - if metadata_valid: - self.metadata = self.metadata_callback(self.cpv, + if metadata_valid: + # Since we're supposed to be able to efficiently obtain the + # EAPI from _parse_eapi_ebuild_head, we don't write cache + # entries for unsupported EAPIs. + if self.eapi_supported: + + if metadata.get("INHERITED", False): + metadata["_eclasses_"] = \ + self.portdb.repositories.get_repo_for_location( + self.repo_path).eclass_db.get_eclass_data( + metadata["INHERITED"].split()) + else: + metadata["_eclasses_"] = {} + metadata.pop("INHERITED", None) + + self.portdb._write_cache(self.cpv, self.repo_path, metadata, self.ebuild_hash) else: - self.returncode = 1 + metadata = {"EAPI": metadata["EAPI"]} + self.metadata = metadata + else: + self.returncode = 1 def _eapi_invalid(self, metadata): repo_name = self.portdb.getRepositoryName(self.repo_path) diff --git a/pym/_emerge/MetadataRegen.py b/pym/_emerge/MetadataRegen.py index 07fea73c4..79446ee79 100644 --- a/pym/_emerge/MetadataRegen.py +++ b/pym/_emerge/MetadataRegen.py @@ -78,12 +78,11 @@ class MetadataRegen(PollScheduler): cpv, ebuild_path, repo_path) if metadata is not None: if consumer is not None: - consumer(cpv, repo_path, metadata, ebuild_hash) + consumer(cpv, repo_path, metadata, ebuild_hash, True) continue yield EbuildMetadataPhase(cpv=cpv, ebuild_hash=ebuild_hash, - metadata_callback=portdb._metadata_callback, portdb=portdb, repo_path=repo_path, settings=portdb.doebuild_settings) @@ -177,7 +176,8 @@ class MetadataRegen(PollScheduler): self._consumer(metadata_process.cpv, metadata_process.repo_path, metadata_process.metadata, - metadata_process.ebuild_hash) + metadata_process.ebuild_hash, + metadata_process.eapi_supported) self._schedule() diff --git a/pym/_emerge/actions.py b/pym/_emerge/actions.py index 62f3ff79d..eaf5a15ea 100644 --- a/pym/_emerge/actions.py +++ b/pym/_emerge/actions.py @@ -1752,7 +1752,6 @@ def action_metadata(settings, portdb, myopts, porttrees=None): eapi = src.get('EAPI') if not eapi: eapi = '0' - eapi = eapi.lstrip('-') eapi_supported = eapi_is_supported(eapi) if not eapi_supported: continue @@ -1800,13 +1799,6 @@ def action_metadata(settings, portdb, myopts, porttrees=None): # so there's no need to overwrite it. continue - if not eapi_supported: - src = { - 'EAPI' : '-' + eapi, - dest_chf_key : src[dest_chf_key], - '_eclasses_' : src['_eclasses_'], - } - try: tree_data.dest_db[cpv] = src except CacheError: diff --git a/pym/_emerge/depgraph.py b/pym/_emerge/depgraph.py index 2df29f7ca..4d3b04c32 100644 --- a/pym/_emerge/depgraph.py +++ b/pym/_emerge/depgraph.py @@ -7130,8 +7130,6 @@ def get_mask_info(root_config, cpv, pkgsettings, mreasons = ["corruption"] else: eapi = metadata['EAPI'] - if eapi[:1] == '-': - eapi = eapi[1:] if not portage.eapi_is_supported(eapi): mreasons = ['EAPI %s' % eapi] else: |