Handle zlib.error when reading compressed build logs via GzipFile.
authorZac Medico <zmedico@gentoo.org>
Mon, 23 Aug 2010 01:28:08 +0000 (18:28 -0700)
committerZac Medico <zmedico@gentoo.org>
Mon, 23 Aug 2010 01:28:08 +0000 (18:28 -0700)
pym/_emerge/Scheduler.py
pym/portage/package/ebuild/doebuild.py

index aa0a402907ff017d77b9955de68746863daf4fcc..6979551a3fffae60805586519b6200ae02d78c2e 100644 (file)
@@ -12,6 +12,7 @@ import tempfile
 import textwrap
 import time
 import weakref
+import zlib
 
 import portage
 from portage import StringIO
@@ -1096,6 +1097,9 @@ class Scheduler(PollScheduler):
                                try:
                                        for line in log_file:
                                                writemsg_level(line, noiselevel=-1)
+                               except zlib.error as e:
+                                       writemsg_level("%s\n" % (e,), level=logging.ERROR,
+                                               noiselevel=-1)
                                finally:
                                        log_file.close()
                                failure_log_shown = True
index b340e2759eb2451f32e10ef741ceac51b90dd013..7a00cfffe5613620ff1be396283d38004ac8450f 100644 (file)
@@ -16,6 +16,7 @@ import sys
 import tempfile
 from textwrap import wrap
 import time
+import zlib
 
 import portage
 portage.proxy.lazyimport.lazyimport(globals(),
@@ -1213,6 +1214,10 @@ def _check_build_log(mysettings, out=None):
                re.compile(r'g?make\[\d+\]: warning: jobserver unavailable:')
        make_jobserver = []
 
+       def _eerror(lines):
+               for line in lines:
+                       eerror(line, phase="install", key=mysettings.mycpv, out=out)
+
        try:
                for line in f:
                        line = _unicode_decode(line)
@@ -1233,6 +1238,9 @@ def _check_build_log(mysettings, out=None):
                        if make_jobserver_re.match(line) is not None:
                                make_jobserver.append(line.rstrip("\n"))
 
+       except zlib.error as e:
+               _eerror(["portage encounted a zlib error: '%s'" % (e,),
+                       "while reading the log file: '%s'" % logfile])
        finally:
                f.close()