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: Thu, 01 Dec 2011 21:22:25
Message-Id: b432a1b3051d91546649e8f3190675767461d8e8.zmedico@gentoo
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)