1 |
commit: b432a1b3051d91546649e8f3190675767461d8e8 |
2 |
Author: Zac Medico <zmedico <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Dec 1 21:22:00 2011 +0000 |
4 |
Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Dec 1 21:22:00 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=b432a1b3 |
7 |
|
8 |
_emerge/EbuildMetadataPhase.py: use os.read() |
9 |
|
10 |
There's no need for a file object, and file objects introduce |
11 |
complexity that can lead to bugs as mentioned in bug 337465 comment 31, |
12 |
so use os.read() directly on the file descriptor. |
13 |
|
14 |
--- |
15 |
pym/_emerge/EbuildMetadataPhase.py | 20 +++++++++++++------- |
16 |
1 files changed, 13 insertions(+), 7 deletions(-) |
17 |
|
18 |
diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py |
19 |
index 16948df..e068e8f 100644 |
20 |
--- a/pym/_emerge/EbuildMetadataPhase.py |
21 |
+++ b/pym/_emerge/EbuildMetadataPhase.py |
22 |
@@ -10,6 +10,7 @@ from portage import os |
23 |
from portage import _encodings |
24 |
from portage import _unicode_decode |
25 |
from portage import _unicode_encode |
26 |
+import errno |
27 |
import fcntl |
28 |
import io |
29 |
|
30 |
@@ -75,7 +76,6 @@ class EbuildMetadataPhase(SubProcess): |
31 |
if fd == sys.stderr.fileno(): |
32 |
sys.stderr.flush() |
33 |
|
34 |
- fd_pipes_orig = fd_pipes.copy() |
35 |
self._files = self._files_dict() |
36 |
files = self._files |
37 |
|
38 |
@@ -86,8 +86,8 @@ class EbuildMetadataPhase(SubProcess): |
39 |
fd_pipes[self._metadata_fd] = slave_fd |
40 |
|
41 |
self._raw_metadata = [] |
42 |
- files.ebuild = os.fdopen(master_fd, 'rb', 0) |
43 |
- self._reg_id = self.scheduler.register(files.ebuild.fileno(), |
44 |
+ files.ebuild = master_fd |
45 |
+ self._reg_id = self.scheduler.register(files.ebuild, |
46 |
self._registered_events, self._output_handler) |
47 |
self._registered = True |
48 |
|
49 |
@@ -112,10 +112,16 @@ class EbuildMetadataPhase(SubProcess): |
50 |
def _output_handler(self, fd, event): |
51 |
|
52 |
if event & PollConstants.POLLIN: |
53 |
- self._raw_metadata.append(self._files.ebuild.read()) |
54 |
- if not self._raw_metadata[-1]: |
55 |
- self._unregister() |
56 |
- self.wait() |
57 |
+ try: |
58 |
+ self._raw_metadata.append( |
59 |
+ os.read(self._files.ebuild, self._bufsize)) |
60 |
+ except IOError as e: |
61 |
+ if e.errno not in (errno.EAGAIN,): |
62 |
+ raise |
63 |
+ else: |
64 |
+ if not self._raw_metadata[-1]: |
65 |
+ self._unregister() |
66 |
+ self.wait() |
67 |
|
68 |
self._unregister_if_appropriate(event) |