Gentoo Archives: gentoo-commits

From: Zac Medico <zmedico@g.o>
To: gentoo-commits@l.g.o
Subject: [gentoo-commits] proj/portage:master commit in: pym/_emerge/
Date: Mon, 30 Apr 2018 06:29:30
Message-Id: 1525069201.e1145930e94db753e29330a54e24b0814bd6c80c.zmedico@gentoo
1 commit: e1145930e94db753e29330a54e24b0814bd6c80c
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Mon Apr 30 03:22:46 2018 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Mon Apr 30 06:20:01 2018 +0000
6 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=e1145930
7
8 EbuildMetadataPhase: add_reader asyncio compat (bug 654382)
9
10 Use add_reader for asyncio compatibility.
11
12 Bug: https://bugs.gentoo.org/654382
13
14 pym/_emerge/EbuildMetadataPhase.py | 31 ++++++++++++-------------------
15 1 file changed, 12 insertions(+), 19 deletions(-)
16
17 diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py
18 index 7a5310b83..42bcd6739 100644
19 --- a/pym/_emerge/EbuildMetadataPhase.py
20 +++ b/pym/_emerge/EbuildMetadataPhase.py
21 @@ -15,7 +15,6 @@ from portage import _unicode_encode
22 from portage.dep import extract_unpack_dependencies
23 from portage.eapi import eapi_has_automatic_unpack_dependencies
24
25 -import errno
26 import fcntl
27 import io
28
29 @@ -109,8 +108,7 @@ class EbuildMetadataPhase(SubProcess):
30
31 self._raw_metadata = []
32 files.ebuild = master_fd
33 - self._reg_id = self.scheduler.io_add_watch(files.ebuild,
34 - self._registered_events, self._output_handler)
35 + self.scheduler.add_reader(files.ebuild, self._output_handler)
36 self._registered = True
37
38 retval = portage.doebuild(ebuild_path, "depend",
39 @@ -130,19 +128,14 @@ class EbuildMetadataPhase(SubProcess):
40
41 self.pid = retval[0]
42
43 - def _output_handler(self, fd, event):
44 -
45 - if event & self.scheduler.IO_IN:
46 - while True:
47 - try:
48 - self._raw_metadata.append(
49 - os.read(self._files.ebuild, self._bufsize))
50 - except OSError as e:
51 - if e.errno not in (errno.EAGAIN,):
52 - raise
53 - break
54 - else:
55 - if not self._raw_metadata[-1]:
56 + def _output_handler(self):
57 + while True:
58 + buf = self._read_buf(self._files.ebuild, None)
59 + if buf is None:
60 + break # EAGAIN
61 + elif buf:
62 + self._raw_metadata.append(buf)
63 + else: # EIO/POLLHUP
64 if self.pid is None:
65 self._unregister()
66 self._async_wait()
67 @@ -150,9 +143,9 @@ class EbuildMetadataPhase(SubProcess):
68 self._async_waitpid()
69 break
70
71 - self._unregister_if_appropriate(event)
72 -
73 - return True
74 + def _unregister(self):
75 + self.scheduler.remove_reader(self._files.ebuild)
76 + SubProcess._unregister(self)
77
78 def _async_waitpid_cb(self, *args, **kwargs):
79 """