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 |
""" |