# Don't open the log file during the clean phase since the
# open file can result in an nfs lock on $T/build.log which
# prevents the clean phase from removing $T.
- logfile = self.settings.get("PORTAGE_LOG_FILE")
- if self.phase in ("clean", "cleanrm"):
- logfile = None
+ logfile = None
+ if self.phase not in ("clean", "cleanrm") and \
+ self.settings.get("PORTAGE_BACKGROUND") != "subprocess":
+ logfile = self.settings.get("PORTAGE_LOG_FILE")
fd_pipes = None
if not self.background and self.phase == 'nofetch':
if not fail:
self.returncode = None
+ logfile = None
+ if self.settings.get("PORTAGE_BACKGROUND") != "subprocess":
+ logfile = self.settings.get("PORTAGE_LOG_FILE")
+
if self.phase == "install":
out = portage.StringIO()
_check_build_log(self.settings, out=out)
msg = _unicode_decode(out.getvalue(),
encoding=_encodings['content'], errors='replace')
- self.scheduler.output(msg,
- log_path=self.settings.get("PORTAGE_LOG_FILE"))
+ self.scheduler.output(msg, log_path=logfile)
if fail:
self._die_hooks()
msg = _unicode_decode(out.getvalue(),
encoding=_encodings['content'], errors='replace')
if msg:
- self.scheduler.output(msg,
- log_path=self.settings.get("PORTAGE_LOG_FILE"))
+ self.scheduler.output(msg, log_path=logfile)
post_phase_cmds = _post_phase_cmds.get(self.phase)
if post_phase_cmds is not None:
- logfile = settings.get("PORTAGE_LOG_FILE")
if logfile is not None and self.phase in ("install",):
# Log to a temporary file, since the code we are running
# reads PORTAGE_LOG_FILE for QA checks, and we want to
self._assert_current(post_phase)
- log_path = self.settings.get("PORTAGE_LOG_FILE")
+ log_path = None
+ if self.settings.get("PORTAGE_BACKGROUND") != "subprocess":
+ log_path = self.settings.get("PORTAGE_LOG_FILE")
+
if post_phase.logfile is not None and \
post_phase.logfile != log_path:
# We were logging to a temp file (see above), so append
msg = _unicode_decode(out.getvalue(),
encoding=_encodings['content'], errors='replace')
if msg:
- self.scheduler.output(msg,
- log_path=self.settings.get("PORTAGE_LOG_FILE"))
+ log_path = None
+ if self.settings.get("PORTAGE_BACKGROUND") != "subprocess":
+ log_path = self.settings.get("PORTAGE_LOG_FILE")
+ self.scheduler.output(msg, log_path=log_path)
# is triggered when mylink._scheduler is None.
mylink._scheduler = None
+ # In this subprocess we don't want PORTAGE_BACKGROUND to
+ # suppress stdout/stderr output since they are pipes. We
+ # also don't want to open PORTAGE_LOG_FILE, since it will
+ # already be opened by the parent process, so we set the
+ # "subprocess" value for use in conditional logging code
+ # involving PORTAGE_LOG_FILE.
+ self.settings["PORTAGE_BACKGROUND"] = "subprocess"
+ self.settings.backup_changes("PORTAGE_BACKGROUND")
+
rval = 1
try:
rval = mylink.merge(self.pkgloc, self.infloc,