Make pmb.helpers.run.root support non-timeout output modes (MR 1996)

Before this commit, pmb.helpers.run_core.sanity_checks would raise
a runtime error when pmb.helpers.run.root was called with an output
mode that did not support timeouts (like background).
This commit is contained in:
Johannes Marbach 2020-12-05 14:19:39 +01:00 committed by Oliver Smith
parent de175bfb1f
commit 82d149c85d
No known key found for this signature in database
GPG key ID: 5AE7F5513E0885CB
3 changed files with 15 additions and 3 deletions

View file

@ -98,6 +98,13 @@ defaults = {
"extra_space": "0" "extra_space": "0"
} }
# pmbootstrap will kill programs which do not output anything for several
# minutes and have one of the following output types. See
# pmb.helpers.run_core.core() for more information.
run_outputs_with_timeout = ["log", "stdout"]
# #
# CHROOT # CHROOT
# #

View file

@ -73,5 +73,9 @@ def root(args, cmd, working_dir=None, output="log", output_return=False,
if env: if env:
cmd = ["sh", "-c", flat_cmd(cmd, env=env)] cmd = ["sh", "-c", flat_cmd(cmd, env=env)]
cmd = ["sudo"] + cmd cmd = ["sudo"] + cmd
# pmbootstrap shall use 'sudo kill' to get rid of timed out programs
kill_as_root = output in pmb.config.run_outputs_with_timeout or None
return user(args, cmd, working_dir, output, output_return, check, env, return user(args, cmd, working_dir, output, output_return, check, env,
True) kill_as_root)

View file

@ -33,7 +33,7 @@ def sanity_checks(output="log", output_return=False, check=None,
if output_return and output in ["tui", "background"]: if output_return and output in ["tui", "background"]:
raise RuntimeError("Can't use output_return with output: " + output) raise RuntimeError("Can't use output_return with output: " + output)
if kill_as_root and output in ["interactive", "tui", "background"]: if kill_as_root and output not in pmb.config.run_outputs_with_timeout:
raise RuntimeError("Can't use kill_as_root with output: " + output) raise RuntimeError("Can't use kill_as_root with output: " + output)
@ -270,7 +270,8 @@ def core(args, log_message, cmd, working_dir=None, output="log",
if not args.details_to_stdout and output in ["stdout", "interactive"]: if not args.details_to_stdout and output in ["stdout", "interactive"]:
output_to_stdout = True output_to_stdout = True
output_timeout = output in ["log", "stdout"] and not disable_timeout output_timeout = output in pmb.config.run_outputs_with_timeout \
and not disable_timeout
(code, output_after_run) = foreground_pipe(args, cmd, working_dir, (code, output_after_run) = foreground_pipe(args, cmd, working_dir,
output_to_stdout, output_to_stdout,
output_return, output_return,