commit: e1145930e94db753e29330a54e24b0814bd6c80c Author: Zac Medico <zmedico <AT> gentoo <DOT> org> AuthorDate: Mon Apr 30 03:22:46 2018 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Mon Apr 30 06:20:01 2018 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e1145930
EbuildMetadataPhase: add_reader asyncio compat (bug 654382) Use add_reader for asyncio compatibility. Bug: https://bugs.gentoo.org/654382 pym/_emerge/EbuildMetadataPhase.py | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py index 7a5310b83..42bcd6739 100644 --- a/pym/_emerge/EbuildMetadataPhase.py +++ b/pym/_emerge/EbuildMetadataPhase.py @@ -15,7 +15,6 @@ from portage import _unicode_encode from portage.dep import extract_unpack_dependencies from portage.eapi import eapi_has_automatic_unpack_dependencies -import errno import fcntl import io @@ -109,8 +108,7 @@ class EbuildMetadataPhase(SubProcess): self._raw_metadata = [] files.ebuild = master_fd - self._reg_id = self.scheduler.io_add_watch(files.ebuild, - self._registered_events, self._output_handler) + self.scheduler.add_reader(files.ebuild, self._output_handler) self._registered = True retval = portage.doebuild(ebuild_path, "depend", @@ -130,19 +128,14 @@ class EbuildMetadataPhase(SubProcess): self.pid = retval[0] - def _output_handler(self, fd, event): - - if event & self.scheduler.IO_IN: - while True: - try: - self._raw_metadata.append( - os.read(self._files.ebuild, self._bufsize)) - except OSError as e: - if e.errno not in (errno.EAGAIN,): - raise - break - else: - if not self._raw_metadata[-1]: + def _output_handler(self): + while True: + buf = self._read_buf(self._files.ebuild, None) + if buf is None: + break # EAGAIN + elif buf: + self._raw_metadata.append(buf) + else: # EIO/POLLHUP if self.pid is None: self._unregister() self._async_wait() @@ -150,9 +143,9 @@ class EbuildMetadataPhase(SubProcess): self._async_waitpid() break - self._unregister_if_appropriate(event) - - return True + def _unregister(self): + self.scheduler.remove_reader(self._files.ebuild) + SubProcess._unregister(self) def _async_waitpid_cb(self, *args, **kwargs): """
