Bug #288906 - Fix Scheduler._dblink_elog() to always append messages to the
authorZac Medico <zmedico@gentoo.org>
Sun, 18 Oct 2009 03:20:05 +0000 (03:20 -0000)
committerZac Medico <zmedico@gentoo.org>
Sun, 18 Oct 2009 03:20:05 +0000 (03:20 -0000)
build log if available (regardless whether or not message goes to stdout).
(trunk r14600)

svn path=/main/branches/2.1.7/; revision=14634

pym/_emerge/Scheduler.py

index 0a9e87096ad184a9342a4b5f2fc145768f96feea..bfcba9f3e1aad31d127f13e99c71ad1218dd70aa 100644 (file)
@@ -10,6 +10,15 @@ import sys
 import textwrap
 import time
 import weakref
+
+try:
+       from io import StringIO
+except ImportError:
+       # Needed for python-2.6 with USE=build since
+       # io imports threading which imports thread
+       # which is unavailable.
+       from StringIO import StringIO
+
 import portage
 from portage import os
 from portage import _encodings
@@ -495,23 +504,19 @@ class Scheduler(PollScheduler):
        def _dblink_elog(self, pkg_dblink, phase, func, msgs):
 
                log_path = pkg_dblink.settings.get("PORTAGE_LOG_FILE")
-               log_file = None
-               out = sys.stdout
                background = self._background
+               out = StringIO()
 
-               if background and log_path is not None:
-                       log_file = codecs.open(_unicode_encode(log_path,
-                               encoding=_encodings['fs'], errors='strict'),
-                               mode='a', encoding=_encodings['content'],
-                               errors='backslashreplace')
-                       out = log_file
+               for msg in msgs:
+                       func(msg, phase=phase, key=pkg_dblink.mycpv, out=out)
 
-               try:
-                       for msg in msgs:
-                               func(msg, phase=phase, key=pkg_dblink.mycpv, out=out)
-               finally:
-                       if log_file is not None:
-                               log_file.close()
+               out_str = out.getvalue()
+
+               if not background:
+                       portage.util.writemsg_stdout(out_str, noiselevel=-1)
+
+               if log_path is not None:
+                       self._append_to_log_path(log_path, out_str)
 
        def _dblink_emerge_log(self, msg):
                self._logger.log(msg)