diff options
author | Zac Medico <zmedico@gentoo.org> | 2018-04-29 20:22:46 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2018-04-29 23:20:01 -0700 |
commit | e1145930e94db753e29330a54e24b0814bd6c80c (patch) | |
tree | 0740fe4047c4d8601b616d67b0529a36d3aac78d | |
parent | _LockProcess: add_reader asyncio compat (bug 654382) (diff) | |
download | portage-e1145930.tar.gz portage-e1145930.tar.bz2 portage-e1145930.zip |
EbuildMetadataPhase: add_reader asyncio compat (bug 654382)
Use add_reader for asyncio compatibility.
Bug: https://bugs.gentoo.org/654382
-rw-r--r-- | pym/_emerge/EbuildMetadataPhase.py | 31 |
1 files 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): """ |