def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) # self._raw_metadata is None when _start returns # early due to an unsupported EAPI if self.returncode == os.EX_OK and \ self._raw_metadata is not None: 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. metadata_valid = False else: metadata = dict(zip(portage.auxdbkeys, metadata_lines)) parsed_eapi = self._eapi if parsed_eapi is None: parsed_eapi = "0" 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) metadata_valid = False 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) if eapi_has_automatic_unpack_dependencies(metadata["EAPI"]): repo = self.portdb.repositories.get_name_for_location(self.repo_path) unpackers = self.settings.unpack_dependencies.get(repo, {}).get(metadata["EAPI"], {}) unpack_dependencies = extract_unpack_dependencies(metadata["SRC_URI"], unpackers) if unpack_dependencies: metadata["DEPEND"] += (" " if metadata["DEPEND"] else "") + unpack_dependencies # If called by egencache, this cache write is # undesirable when metadata-transfer is disabled. if self.write_auxdb is not False: self.portdb._write_cache(self.cpv, self.repo_path, metadata, self.ebuild_hash) else: metadata = {"EAPI": metadata["EAPI"]} self.metadata = metadata else: self.returncode = 1
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) if self.returncode == os.EX_OK: metadata_lines = ''.join(_unicode_decode(chunk, encoding=_encodings['repo.content'], errors='replace') for chunk in self._raw_metadata).splitlines() if len(portage.auxdbkeys) != len(metadata_lines): # Don't trust bash's returncode if the # number of lines is incorrect. self.returncode = 1 else: metadata = zip(portage.auxdbkeys, metadata_lines) self.metadata = self.metadata_callback(self.cpv, self.ebuild_path, self.repo_path, metadata, self.ebuild_mtime)
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) # self._raw_metadata is None when _start returns # early due to an unsupported EAPI detected with # FEATURES=parse-eapi-ebuild-head if self.returncode == os.EX_OK and \ self._raw_metadata is not None: metadata_lines = _unicode_decode(b''.join(self._raw_metadata), encoding=_encodings['repo.content'], errors='replace').splitlines() if len(portage.auxdbkeys) != len(metadata_lines): # Don't trust bash's returncode if the # number of lines is incorrect. self.returncode = 1 else: metadata = zip(portage.auxdbkeys, metadata_lines) self.metadata = self.metadata_callback(self.cpv, self.repo_path, metadata, self.ebuild_hash)
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) if self.returncode == os.EX_OK: metadata_lines = ''.join( _unicode_decode(chunk, encoding=_encodings['repo.content'], errors='replace') for chunk in self._raw_metadata).splitlines() if len(portage.auxdbkeys) != len(metadata_lines): # Don't trust bash's returncode if the # number of lines is incorrect. self.returncode = 1 else: metadata = zip(portage.auxdbkeys, metadata_lines) self.metadata = self.metadata_callback(self.cpv, self.ebuild_path, self.repo_path, metadata, self.ebuild_mtime)
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) # self._raw_metadata is None when _start returns # early due to an unsupported EAPI detected with # FEATURES=parse-eapi-ebuild-head if self.returncode == os.EX_OK and \ self._raw_metadata is not None: metadata_lines = _unicode_decode( b''.join(self._raw_metadata), encoding=_encodings['repo.content'], errors='replace').splitlines() if len(portage.auxdbkeys) != len(metadata_lines): # Don't trust bash's returncode if the # number of lines is incorrect. self.returncode = 1 else: metadata = zip(portage.auxdbkeys, metadata_lines) self.metadata = self.metadata_callback(self.cpv, self.repo_path, metadata, self.ebuild_hash)
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) if self.cgroup: def get_pids(cgroup): try: with open(os.path.join(cgroup, 'cgroup.procs'), 'r') as f: return [int(p) for p in f.read().split()] except OSError: # cgroup removed already? return [] def kill_all(pids, sig): for p in pids: try: os.kill(p, sig) except OSError as e: if e.errno == errno.EPERM: # Reported with hardened kernel (bug #358211). writemsg_level( "!!! kill: (%i) - Operation not permitted\n" % (p, ), level=logging.ERROR, noiselevel=-1) elif e.errno != errno.ESRCH: raise # step 1: kill all orphans pids = get_pids(self.cgroup) if pids: kill_all(pids, signal.SIGKILL) # step 2: remove the cgroup try: os.rmdir(self.cgroup) except OSError: # it may be removed already, or busy # we can't do anything good about it pass
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) if self.cgroup: def get_pids(cgroup): try: with open(os.path.join(cgroup, 'cgroup.procs'), 'r') as f: return [int(p) for p in f.read().split()] except OSError: # cgroup removed already? return [] def kill_all(pids, sig): for p in pids: try: os.kill(p, sig) except OSError as e: if e.errno == errno.EPERM: # Reported with hardened kernel (bug #358211). writemsg_level( "!!! kill: (%i) - Operation not permitted\n" % (p,), level=logging.ERROR, noiselevel=-1) elif e.errno != errno.ESRCH: raise # step 1: kill all orphans pids = get_pids(self.cgroup) if pids: kill_all(pids, signal.SIGKILL) # step 2: remove the cgroup try: os.rmdir(self.cgroup) except OSError: # it may be removed already, or busy # we can't do anything good about it pass
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) if self.proc.returncode is None: # Suppress warning messages like this: # ResourceWarning: subprocess 1234 is still running self.proc.returncode = self.returncode
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) self._cgroup_cleanup()
def _set_returncode(self, wait_retval): SubProcess._set_returncode(self, wait_retval) self._cgroup_cleanup()