diff options
author | Zac Medico <zmedico@gentoo.org> | 2010-08-21 11:18:40 -0700 |
---|---|---|
committer | Zac Medico <zmedico@gentoo.org> | 2010-08-21 11:18:40 -0700 |
commit | 42cab46428e69cf7423053b10940a275c38c04ff (patch) | |
tree | 3d136311af222afb8d0d9bda838c1d5674b6cf4f /pym/_emerge/Scheduler.py | |
parent | 99832a79bff002a7494c4fb31701451c13a5a435 (diff) | |
download | portage-42cab46428e69cf7423053b10940a275c38c04ff.tar.gz portage-42cab46428e69cf7423053b10940a275c38c04ff.tar.bz2 portage-42cab46428e69cf7423053b10940a275c38c04ff.zip |
Bug #324191 - Add support for FEATURES=compress-build-logs. The causes
all build logs to be compressed while they are being written. Log file
names have an extension that is appropriate for the compression type.
Currently, only gzip(1) compression is supported, so build logs will
have a '.gz' extension when this feature is enabled.
Diffstat (limited to 'pym/_emerge/Scheduler.py')
-rw-r--r-- | pym/_emerge/Scheduler.py | 40 |
1 files changed, 13 insertions, 27 deletions
diff --git a/pym/_emerge/Scheduler.py b/pym/_emerge/Scheduler.py index 1c732c309..aa0a40290 100644 --- a/pym/_emerge/Scheduler.py +++ b/pym/_emerge/Scheduler.py @@ -4,6 +4,7 @@ from __future__ import print_function import codecs +import gzip import logging import shutil import sys @@ -78,7 +79,8 @@ class Scheduler(PollScheduler): class _iface_class(SlotObject): __slots__ = ("dblinkEbuildPhase", "dblinkDisplayMerge", - "dblinkElog", "dblinkEmergeLog", "fetch", "register", "schedule", + "dblinkElog", "dblinkEmergeLog", "fetch", + "output", "register", "schedule", "scheduleSetup", "scheduleUnpack", "scheduleYield", "unregister") @@ -209,7 +211,8 @@ class Scheduler(PollScheduler): dblinkDisplayMerge=self._dblink_display_merge, dblinkElog=self._dblink_elog, dblinkEmergeLog=self._dblink_emerge_log, - fetch=fetch_iface, register=self._register, + fetch=fetch_iface, output=self._task_output, + register=self._register, schedule=self._schedule_wait, scheduleSetup=self._schedule_setup, scheduleUnpack=self._schedule_unpack, @@ -562,22 +565,9 @@ class Scheduler(PollScheduler): installed = type_name == "installed" return self._pkg(cpv, type_name, root_config, installed=installed) - def _append_to_log_path(self, log_path, msg): - - f = codecs.open(_unicode_encode(log_path, - encoding=_encodings['fs'], errors='strict'), - mode='a', encoding=_encodings['content'], - errors='backslashreplace') - try: - f.write(_unicode_decode(msg, - encoding=_encodings['content'], errors='replace')) - finally: - f.close() - def _dblink_elog(self, pkg_dblink, phase, func, msgs): log_path = pkg_dblink.settings.get("PORTAGE_LOG_FILE") - background = self._background out = StringIO() for msg in msgs: @@ -585,11 +575,7 @@ class Scheduler(PollScheduler): 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) + self._task_output(out_str, log_path=log_path) def _dblink_emerge_log(self, msg): self._logger.log(msg) @@ -603,10 +589,7 @@ class Scheduler(PollScheduler): portage.util.writemsg_level(msg, level=level, noiselevel=noiselevel) else: - if not background: - portage.util.writemsg_level(msg, - level=level, noiselevel=noiselevel) - self._append_to_log_path(log_path, msg) + self._task_output(msg, log_path=log_path) def _dblink_ebuild_phase(self, pkg_dblink, pkg_dbapi, ebuild_path, phase): @@ -1100,11 +1083,14 @@ class Scheduler(PollScheduler): log_path = self._locate_failure_log(failed_pkg) if log_path is not None: try: - log_file = codecs.open(_unicode_encode(log_path, - encoding=_encodings['fs'], errors='strict'), - mode='r', encoding=_encodings['content'], errors='replace') + log_file = open(_unicode_encode(log_path, + encoding=_encodings['fs'], errors='strict'), mode='rb') except IOError: pass + else: + if log_path.endswith('.gz'): + log_file = gzip.GzipFile(filename='', + mode='rb', fileobj=log_file) if log_file is not None: try: |