summaryrefslogtreecommitdiffstats
path: root/pym/_emerge/EbuildMetadataPhase.py
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2011-12-01 22:14:13 -0800
committerZac Medico <zmedico@gentoo.org>2011-12-01 22:14:13 -0800
commitc6c71eefb9532af0d4505de70e58f45ad8e8fe0a (patch)
treef157124695ebd1a818c5ce3ed07fc343ff827a35 /pym/_emerge/EbuildMetadataPhase.py
parentcaea9ee807eba03118564030a166f9856d4439de (diff)
downloadportage-c6c71eefb9532af0d4505de70e58f45ad8e8fe0a.tar.gz
portage-c6c71eefb9532af0d4505de70e58f45ad8e8fe0a.tar.bz2
portage-c6c71eefb9532af0d4505de70e58f45ad8e8fe0a.zip
Handle OSError from os.read and loop if needed.
Looping fixes EbuildMetadataPhase failures for ebuilds that produce more than 4096 bytes of metadata, broken since commit b432a1b3051d91546649e8f3190675767461d8e8.
Diffstat (limited to 'pym/_emerge/EbuildMetadataPhase.py')
-rw-r--r--pym/_emerge/EbuildMetadataPhase.py23
1 files changed, 13 insertions, 10 deletions
diff --git a/pym/_emerge/EbuildMetadataPhase.py b/pym/_emerge/EbuildMetadataPhase.py
index e068e8f24..d4f5bc009 100644
--- a/pym/_emerge/EbuildMetadataPhase.py
+++ b/pym/_emerge/EbuildMetadataPhase.py
@@ -112,16 +112,19 @@ class EbuildMetadataPhase(SubProcess):
def _output_handler(self, fd, event):
if event & PollConstants.POLLIN:
- try:
- self._raw_metadata.append(
- os.read(self._files.ebuild, self._bufsize))
- except IOError as e:
- if e.errno not in (errno.EAGAIN,):
- raise
- else:
- if not self._raw_metadata[-1]:
- self._unregister()
- self.wait()
+ while True:
+ try:
+ self._raw_metadata.append(
+ os.read(self._files.ebuild, self._bufsize))
+ except OSError as e:
+ if e.errno not in (errno.EAGAIN,):
+ raise
+ break
+ else:
+ if not self._raw_metadata[-1]:
+ self._unregister()
+ self.wait()
+ break
self._unregister_if_appropriate(event)