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: Fri, 02 Dec 2011 06:14:38
Message-Id: c6c71eefb9532af0d4505de70e58f45ad8e8fe0a.zmedico@gentoo
1 commit: c6c71eefb9532af0d4505de70e58f45ad8e8fe0a
2 Author: Zac Medico <zmedico <AT> gentoo <DOT> org>
3 AuthorDate: Fri Dec 2 06:14:13 2011 +0000
4 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org>
5 CommitDate: Fri Dec 2 06:14:13 2011 +0000
6 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/portage.git;a=commit;h=c6c71eef
7
8 Handle OSError from os.read and loop if needed.
9
10 Looping fixes EbuildMetadataPhase failures for ebuilds that produce
11 more than 4096 bytes of metadata, broken since commit
12 b432a1b3051d91546649e8f3190675767461d8e8.
13
14 ---
15 pym/_emerge/AsynchronousLock.py | 4 ++--
16 pym/_emerge/EbuildMetadataPhase.py | 23 +++++++++++++----------
17 pym/_emerge/PipeReader.py | 25 ++++++++++++++-----------
18 3 files changed, 29 insertions(+), 23 deletions(-)
19
20 diff --git a/pym/_emerge/AsynchronousLock.py b/pym/_emerge/AsynchronousLock.py
21 index 39e36c8..9d0545b 100644
22 --- a/pym/_emerge/AsynchronousLock.py
23 +++ b/pym/_emerge/AsynchronousLock.py
24 @@ -138,7 +138,7 @@ class _LockThread(AbstractPollTask):
25 if event & PollConstants.POLLIN:
26 try:
27 buf = os.read(self._files['pipe_read'], self._bufsize)
28 - except IOError as e:
29 + except OSError as e:
30 if e.errno not in (errno.EAGAIN,):
31 raise
32 if buf:
33 @@ -274,7 +274,7 @@ class _LockProcess(AbstractPollTask):
34 if event & PollConstants.POLLIN:
35 try:
36 buf = os.read(self._files['pipe_in'], self._bufsize)
37 - except IOError as e:
38 + except OSError as e:
39 if e.errno not in (errno.EAGAIN,):
40 raise
41 if buf:
42
43 diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py
44 index e068e8f..d4f5bc0 100644
45 --- a/pym/_emerge/EbuildMetadataPhase.py
46 +++ b/pym/_emerge/EbuildMetadataPhase.py
47 @@ -112,16 +112,19 @@ class EbuildMetadataPhase(SubProcess):
48 def _output_handler(self, fd, event):
49
50 if event & PollConstants.POLLIN:
51 - try:
52 - self._raw_metadata.append(
53 - os.read(self._files.ebuild, self._bufsize))
54 - except IOError as e:
55 - if e.errno not in (errno.EAGAIN,):
56 - raise
57 - else:
58 - if not self._raw_metadata[-1]:
59 - self._unregister()
60 - self.wait()
61 + while True:
62 + try:
63 + self._raw_metadata.append(
64 + os.read(self._files.ebuild, self._bufsize))
65 + except OSError as e:
66 + if e.errno not in (errno.EAGAIN,):
67 + raise
68 + break
69 + else:
70 + if not self._raw_metadata[-1]:
71 + self._unregister()
72 + self.wait()
73 + break
74
75 self._unregister_if_appropriate(event)
76
77
78 diff --git a/pym/_emerge/PipeReader.py b/pym/_emerge/PipeReader.py
79 index 67144c3..af8cfdd 100644
80 --- a/pym/_emerge/PipeReader.py
81 +++ b/pym/_emerge/PipeReader.py
82 @@ -59,18 +59,21 @@ class PipeReader(AbstractPollTask):
83
84 if event & PollConstants.POLLIN:
85
86 - data = None
87 - try:
88 - data = os.read(fd, self._bufsize)
89 - except IOError as e:
90 - if e.errno not in (errno.EAGAIN,):
91 - raise
92 - else:
93 - if data:
94 - self._read_data.append(data)
95 + while True:
96 + data = None
97 + try:
98 + data = os.read(fd, self._bufsize)
99 + except OSError as e:
100 + if e.errno not in (errno.EAGAIN,):
101 + raise
102 + break
103 else:
104 - self._unregister()
105 - self.wait()
106 + if data:
107 + self._read_data.append(data)
108 + else:
109 + self._unregister()
110 + self.wait()
111 + break
112
113 self._unregister_if_appropriate(event)