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/portage/package/ebuild | |
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/portage/package/ebuild')
-rw-r--r-- | pym/portage/package/ebuild/doebuild.py | 10 | ||||
-rw-r--r-- | pym/portage/package/ebuild/prepare_build_dirs.py | 29 |
2 files changed, 26 insertions, 13 deletions
diff --git a/pym/portage/package/ebuild/doebuild.py b/pym/portage/package/ebuild/doebuild.py index 21f716beb..b340e2759 100644 --- a/pym/portage/package/ebuild/doebuild.py +++ b/pym/portage/package/ebuild/doebuild.py @@ -5,6 +5,7 @@ __all__ = ['doebuild', 'doebuild_environment', 'spawn', 'spawnebuild'] import codecs import errno +import gzip from itertools import chain import logging import os as _os @@ -1179,12 +1180,14 @@ def _check_build_log(mysettings, out=None): if logfile is None: return try: - f = codecs.open(_unicode_encode(logfile, - encoding=_encodings['fs'], errors='strict'), - mode='r', encoding=_encodings['content'], errors='replace') + f = open(_unicode_encode(logfile, encoding=_encodings['fs'], + errors='strict'), mode='rb') except EnvironmentError: return + if logfile.endswith('.gz'): + f = gzip.GzipFile(filename='', mode='rb', fileobj=f) + am_maintainer_mode = [] bash_command_not_found = [] bash_command_not_found_re = re.compile( @@ -1212,6 +1215,7 @@ def _check_build_log(mysettings, out=None): try: for line in f: + line = _unicode_decode(line) if am_maintainer_mode_re.search(line) is not None and \ am_maintainer_mode_exclude_re.search(line) is None: am_maintainer_mode.append(line.rstrip("\n")) diff --git a/pym/portage/package/ebuild/prepare_build_dirs.py b/pym/portage/package/ebuild/prepare_build_dirs.py index 0ae60342f..25e5beb6e 100644 --- a/pym/portage/package/ebuild/prepare_build_dirs.py +++ b/pym/portage/package/ebuild/prepare_build_dirs.py @@ -3,8 +3,8 @@ __all__ = ['prepare_build_dirs'] -import codecs import errno +import gzip import shutil import stat import time @@ -117,15 +117,17 @@ def _adjust_perms_msg(settings, msg): if background and log_path is not None: try: - log_file = codecs.open(_unicode_encode(log_path, - encoding=_encodings['fs'], errors='strict'), - mode='a', encoding=_encodings['content'], errors='replace') + log_file = open(_unicode_encode(log_path, + encoding=_encodings['fs'], errors='strict'), mode='ab') except IOError: def write(msg): pass else: + if log_path.endswith('.gz'): + log_file = gzip.GzipFile(filename='', + mode='ab', fileobj=log_file) def write(msg): - log_file.write(_unicode_decode(msg)) + log_file.write(_unicode_encode(msg)) log_file.flush() try: @@ -281,6 +283,11 @@ def _prepare_workdir(mysettings): writemsg(_("!!! Disabling logging.\n"), noiselevel=-1) while "PORT_LOGDIR" in mysettings: del mysettings["PORT_LOGDIR"] + + compress_log_ext = '' + if 'compress-build-logs' in mysettings.features: + compress_log_ext = '.gz' + if "PORT_LOGDIR" in mysettings and \ os.access(mysettings["PORT_LOGDIR"], os.W_OK): logid_path = os.path.join(mysettings["PORTAGE_BUILDDIR"], ".logid") @@ -292,12 +299,14 @@ def _prepare_workdir(mysettings): if "split-log" in mysettings.features: mysettings["PORTAGE_LOG_FILE"] = os.path.join( - mysettings["PORT_LOGDIR"], "build", "%s/%s:%s.log" % \ - (mysettings["CATEGORY"], mysettings["PF"], logid_time)) + mysettings["PORT_LOGDIR"], "build", "%s/%s:%s.log%s" % \ + (mysettings["CATEGORY"], mysettings["PF"], logid_time, + compress_log_ext)) else: mysettings["PORTAGE_LOG_FILE"] = os.path.join( - mysettings["PORT_LOGDIR"], "%s:%s:%s.log" % \ - (mysettings["CATEGORY"], mysettings["PF"], logid_time)) + mysettings["PORT_LOGDIR"], "%s:%s:%s.log%s" % \ + (mysettings["CATEGORY"], mysettings["PF"], logid_time, + compress_log_ext)) ensure_dirs(os.path.dirname(mysettings["PORTAGE_LOG_FILE"])) @@ -307,4 +316,4 @@ def _prepare_workdir(mysettings): # current policy will allow it to work when a pty is available, but # not through a normal pipe. See bug #162404. mysettings["PORTAGE_LOG_FILE"] = os.path.join( - mysettings["T"], "build.log") + mysettings["T"], "build.log%s" % compress_log_ext) |