aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZac Medico <zmedico@gentoo.org>2020-06-15 12:46:03 -0700
committerZac Medico <zmedico@gentoo.org>2020-06-15 12:47:05 -0700
commit2f657c642ff292fd44ed9cb253ab6d13da84303f (patch)
treea42871df01204bfea021c62c48a7097c5db558b5 /lib/_emerge
parentUpdates for portage-2.3.101 release (diff)
downloadportage-2f657c642ff292fd44ed9cb253ab6d13da84303f.tar.gz
portage-2f657c642ff292fd44ed9cb253ab6d13da84303f.tar.bz2
portage-2f657c642ff292fd44ed9cb253ab6d13da84303f.zip
Revert "Support PORTAGE_LOG_FILTER_FILE_CMD (bug 709746)"
This reverts commit ab7556a5c0df418d61148a05347f4c73115e5747. We've had reports of emerge hangs, so reverting this for now. Bug: https://bugs.gentoo.org/709746 Signed-off-by: Zac Medico <zmedico@gentoo.org>
Diffstat (limited to 'lib/_emerge')
-rw-r--r--lib/_emerge/AbstractEbuildProcess.py3
-rw-r--r--lib/_emerge/BinpkgFetcher.py3
-rw-r--r--lib/_emerge/EbuildFetcher.py3
-rw-r--r--lib/_emerge/EbuildPhase.py47
-rw-r--r--lib/_emerge/SpawnProcess.py58
5 files changed, 24 insertions, 90 deletions
diff --git a/lib/_emerge/AbstractEbuildProcess.py b/lib/_emerge/AbstractEbuildProcess.py
index ae1aae55f..1c1955cfe 100644
--- a/lib/_emerge/AbstractEbuildProcess.py
+++ b/lib/_emerge/AbstractEbuildProcess.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2019 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import errno
@@ -196,7 +196,6 @@ class AbstractEbuildProcess(SpawnProcess):
null_fd = os.open('/dev/null', os.O_RDONLY)
self.fd_pipes[0] = null_fd
- self.log_filter_file = self.settings.get('PORTAGE_LOG_FILTER_FILE_CMD')
try:
SpawnProcess._start(self)
finally:
diff --git a/lib/_emerge/BinpkgFetcher.py b/lib/_emerge/BinpkgFetcher.py
index 2e5861cc1..36d027de3 100644
--- a/lib/_emerge/BinpkgFetcher.py
+++ b/lib/_emerge/BinpkgFetcher.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import functools
@@ -158,7 +158,6 @@ class _BinpkgFetcherProcess(SpawnProcess):
self.env = fetch_env
if settings.selinux_enabled():
self._selinux_type = settings["PORTAGE_FETCH_T"]
- self.log_filter_file = settings.get('PORTAGE_LOG_FILTER_FILE_CMD')
SpawnProcess._start(self)
def _pipe(self, fd_pipes):
diff --git a/lib/_emerge/EbuildFetcher.py b/lib/_emerge/EbuildFetcher.py
index 55349c33c..1e40994fb 100644
--- a/lib/_emerge/EbuildFetcher.py
+++ b/lib/_emerge/EbuildFetcher.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
import copy
@@ -225,7 +225,6 @@ class _EbuildFetcherProcess(ForkProcess):
settings["NOCOLOR"] = nocolor
self._settings = settings
- self.log_filter_file = settings.get('PORTAGE_LOG_FILTER_FILE_CMD')
ForkProcess._start(self)
# Free settings now since it's no longer needed in
diff --git a/lib/_emerge/EbuildPhase.py b/lib/_emerge/EbuildPhase.py
index ddb3dc719..477e0ba97 100644
--- a/lib/_emerge/EbuildPhase.py
+++ b/lib/_emerge/EbuildPhase.py
@@ -26,8 +26,6 @@ from portage.package.ebuild.prepare_build_dirs import (_prepare_workdir,
from portage.util.futures.compat_coroutine import coroutine
from portage.util import writemsg
from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
-from portage.util._async.BuildLogger import BuildLogger
-from portage.util.futures import asyncio
from portage.util.futures.executor.fork import ForkExecutor
try:
@@ -71,11 +69,6 @@ class EbuildPhase(CompositeTask):
_locked_phases = ("setup", "preinst", "postinst", "prerm", "postrm")
def _start(self):
- future = asyncio.ensure_future(self._async_start(), loop=self.scheduler)
- self._start_task(AsyncTaskFuture(future=future), self._async_start_exit)
-
- @coroutine
- def _async_start(self):
need_builddir = self.phase not in EbuildProcess._phases_without_builddir
@@ -133,7 +126,7 @@ class EbuildPhase(CompositeTask):
# Force background=True for this header since it's intended
# for the log and it doesn't necessarily need to be visible
# elsewhere.
- yield self._elog('einfo', msg, background=True)
+ self._elog('einfo', msg, background=True)
if self.phase == 'package':
if 'PORTAGE_BINPKG_TMPFILE' not in self.settings:
@@ -141,12 +134,6 @@ class EbuildPhase(CompositeTask):
os.path.join(self.settings['PKGDIR'],
self.settings['CATEGORY'], self.settings['PF']) + '.tbz2'
- def _async_start_exit(self, task):
- task.future.cancelled() or task.future.result()
- if self._default_exit(task) != os.EX_OK:
- self.wait()
- return
-
if self.phase in ("pretend", "prerm"):
env_extractor = BinpkgEnvExtractor(background=self.background,
scheduler=self.scheduler, settings=self.settings)
@@ -404,7 +391,6 @@ class EbuildPhase(CompositeTask):
self.returncode = 1
self.wait()
- @coroutine
def _elog(self, elog_funcname, lines, background=None):
if background is None:
background = self.background
@@ -421,30 +407,11 @@ class EbuildPhase(CompositeTask):
portage.output.havecolor = global_havecolor
msg = out.getvalue()
if msg:
- build_logger = None
- try:
- log_file = None
- log_path = None
- if self.settings.get("PORTAGE_BACKGROUND") != "subprocess":
- log_path = self.settings.get("PORTAGE_LOG_FILE")
- if log_path:
- build_logger = BuildLogger(env=self.settings.environ(),
- log_path=log_path,
- log_filter_file=self.settings.get('PORTAGE_LOG_FILTER_FILE_CMD'),
- scheduler=self.scheduler)
- build_logger.start()
- log_file = build_logger.stdin
-
- yield self.scheduler.async_output(msg, log_file=log_file,
- background=background)
-
- if build_logger is not None:
- build_logger.stdin.close()
- yield build_logger.async_wait()
- except asyncio.CancelledError:
- if build_logger is not None:
- build_logger.cancel()
- raise
+ 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,
+ background=background)
class _PostPhaseCommands(CompositeTask):
@@ -513,4 +480,4 @@ class _PostPhaseCommands(CompositeTask):
qa_msg.extend("\t%s: %s" % (filename, " ".join(sorted(soname_deps)))
for filename, soname_deps in unresolved)
qa_msg.append("")
- yield self.elog("eqawarn", qa_msg)
+ self.elog("eqawarn", qa_msg)
diff --git a/lib/_emerge/SpawnProcess.py b/lib/_emerge/SpawnProcess.py
index f96911571..395d66bb9 100644
--- a/lib/_emerge/SpawnProcess.py
+++ b/lib/_emerge/SpawnProcess.py
@@ -1,4 +1,4 @@
-# Copyright 2008-2020 Gentoo Authors
+# Copyright 2008-2018 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
try:
@@ -19,10 +19,7 @@ from portage.const import BASH_BINARY
from portage.localization import _
from portage.output import EOutput
from portage.util import writemsg_level
-from portage.util._async.BuildLogger import BuildLogger
from portage.util._async.PipeLogger import PipeLogger
-from portage.util.futures import asyncio
-from portage.util.futures.compat_coroutine import coroutine
class SpawnProcess(SubProcess):
@@ -37,8 +34,8 @@ class SpawnProcess(SubProcess):
"path_lookup", "pre_exec", "close_fds", "cgroup",
"unshare_ipc", "unshare_mount", "unshare_pid", "unshare_net")
- __slots__ = ("args", "log_filter_file") + \
- _spawn_kwarg_names + ("_main_task", "_selinux_type",)
+ __slots__ = ("args",) + \
+ _spawn_kwarg_names + ("_pipe_logger", "_selinux_type",)
# Max number of attempts to kill the processes listed in cgroup.procs,
# given that processes may fork before they can be killed.
@@ -140,43 +137,13 @@ class SpawnProcess(SubProcess):
fcntl.fcntl(stdout_fd,
fcntl.F_GETFD) | fcntl.FD_CLOEXEC)
- build_logger = BuildLogger(env=self.env,
- log_path=log_file_path,
- log_filter_file=self.log_filter_file,
- scheduler=self.scheduler)
- build_logger.start()
-
- pipe_logger = PipeLogger(background=self.background,
+ self._pipe_logger = PipeLogger(background=self.background,
scheduler=self.scheduler, input_fd=master_fd,
- log_file_path=build_logger.stdin,
+ log_file_path=log_file_path,
stdout_fd=stdout_fd)
-
- pipe_logger.start()
-
+ self._pipe_logger.addExitListener(self._pipe_logger_exit)
+ self._pipe_logger.start()
self._registered = True
- self._main_task = asyncio.ensure_future(self._main(build_logger, pipe_logger), loop=self.scheduler)
- self._main_task.add_done_callback(self._main_exit)
-
- @coroutine
- def _main(self, build_logger, pipe_logger):
- try:
- if pipe_logger.poll() is None:
- yield pipe_logger.async_wait()
- if build_logger.poll() is None:
- yield build_logger.async_wait()
- except asyncio.CancelledError:
- if pipe_logger.poll() is None:
- pipe_logger.cancel()
- if build_logger.poll() is None:
- build_logger.cancel()
- raise
-
- def _main_exit(self, main_task):
- try:
- main_task.result()
- except asyncio.CancelledError:
- self.cancel()
- self._async_waitpid()
def _can_log(self, slave_fd):
return True
@@ -200,17 +167,20 @@ class SpawnProcess(SubProcess):
return spawn_func(args, **kwargs)
+ def _pipe_logger_exit(self, pipe_logger):
+ self._pipe_logger = None
+ self._async_waitpid()
+
def _unregister(self):
SubProcess._unregister(self)
if self.cgroup is not None:
self._cgroup_cleanup()
self.cgroup = None
- if self._main_task is not None:
- self._main_task.done() or self._main_task.cancel()
+ if self._pipe_logger is not None:
+ self._pipe_logger.cancel()
+ self._pipe_logger = None
def _cancel(self):
- if self._main_task is not None:
- self._main_task.done() or self._main_task.cancel()
SubProcess._cancel(self)
self._cgroup_cleanup()