commit: f8ab6cb0acf5074f56bcb5b3b58aa7e3e2f0711e Author: James Stevenson <james.al.stevenson <AT> gmail <DOT> com> AuthorDate: Sun May 23 17:25:36 2021 +0000 Commit: Zac Medico <zmedico <AT> gentoo <DOT> org> CommitDate: Sun May 23 19:54:51 2021 +0000 URL: https://gitweb.gentoo.org/proj/portage.git/commit/?id=f8ab6cb0
emerge --fetch and regenworld: Respect EMERGE_LOG_DIR setting Closes: https://github.com/gentoo/portage/pull/720 Bug: https://bugs.gentoo.org/520378 Signed-off-by: James Stevenson <james.al.stevenson <AT> gmail.com> Signed-off-by: Zac Medico <zmedico <AT> gentoo.org> bin/regenworld | 7 ++++++- lib/_emerge/actions.py | 27 +++++++++++++++++++++------ 2 files changed, 27 insertions(+), 7 deletions(-) diff --git a/bin/regenworld b/bin/regenworld index a5b1f0431..a5ee1580d 100755 --- a/bin/regenworld +++ b/bin/regenworld @@ -57,7 +57,12 @@ if len(sys.argv) >= 2 and sys.argv[1] in ["-h", "--help"]: worldlist = portage.grabfile(world_file) syslist = [x for x in portage.settings.packages if issyspkg(x)] -logfile = portage.grabfile(os.path.join(eroot, "var/log/emerge.log")) +if portage.settings.get("EMERGE_LOG_DIR"): + logfile = portage.grabfile( + os.path.join(portage.settings["EMERGE_LOG_DIR"], "emerge.log") + ) +else: + logfile = portage.grabfile(os.path.join(eroot, "var/log/emerge.log")) biglist = [getpkginfo(x) for x in logfile if iscandidate(x)] tmplist = [] for l in biglist: diff --git a/lib/_emerge/actions.py b/lib/_emerge/actions.py index 239bf6f47..c078e1ab3 100644 --- a/lib/_emerge/actions.py +++ b/lib/_emerge/actions.py @@ -52,6 +52,7 @@ from portage._sets.base import InternalPackageSet from portage.util import cmp_sort_key, normalize_path, writemsg, varexpand, \ writemsg_level, writemsg_stdout from portage.util.digraph import digraph +from portage.util.path import first_existing from portage.util.SlotObject import SlotObject from portage.util._async.run_main_scheduler import run_main_scheduler from portage.util._async.SchedulerInterface import SchedulerInterface @@ -3163,10 +3164,27 @@ def run_action(emerge_config): # This helps minimize parallel emerge.log entries that can confuse log # parsers like genlop. disable_emergelog = False + + emerge_log_dir = emerge_config.target_config.settings.get("EMERGE_LOG_DIR") + default_log_dir = os.path.join( + os.sep, portage.const.EPREFIX.lstrip(os.sep), "var", "log" + ) for x in ("--pretend", "--fetchonly", "--fetch-all-uri"): if x in emerge_config.opts: - disable_emergelog = True - break + if x == "--fetchonly" and "--quiet" in emerge_config.opts: + # Log will be used to store fetch progress + log_dir = emerge_log_dir if emerge_log_dir else default_log_dir + disable_emergelog = not all( + os.access(logfile, os.W_OK) + for logfile in set( + first_existing(os.path.join(log_dir, logfile)) + for logfile in ("emerge.log", "emerge-fetch.log") + ) + ) + break + else: + disable_emergelog = True + break if disable_emergelog: pass elif emerge_config.action in ("search", "info"): @@ -3178,8 +3196,6 @@ def run_action(emerge_config): _emerge.emergelog._disable = disable_emergelog if not disable_emergelog: - emerge_log_dir = \ - emerge_config.target_config.settings.get('EMERGE_LOG_DIR') if emerge_log_dir: try: # At least the parent needs to exist for the lock file. @@ -3193,8 +3209,7 @@ def run_action(emerge_config): else: _emerge.emergelog._emerge_log_dir = emerge_log_dir else: - _emerge.emergelog._emerge_log_dir = os.path.join(os.sep, - portage.const.EPREFIX.lstrip(os.sep), "var", "log") + _emerge.emergelog._emerge_log_dir = default_log_dir portage.util.ensure_dirs(_emerge.emergelog._emerge_log_dir) if not "--pretend" in emerge_config.opts: