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:

Reply via email to