summaryrefslogtreecommitdiffstats
path: root/pym/portage/package/ebuild
diff options
context:
space:
mode:
Diffstat (limited to 'pym/portage/package/ebuild')
-rw-r--r--pym/portage/package/ebuild/doebuild.py10
-rw-r--r--pym/portage/package/ebuild/prepare_build_dirs.py29
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)