commit:     e26a08896f098ff93530efcd2d77d60d2eff0257
Author:     James Stevenson <james.al.stevenson <AT> gmail <DOT> com>
AuthorDate: Sun May 16 10:58:13 2021 +0000
Commit:     Zac Medico <zmedico <AT> gentoo <DOT> org>
CommitDate: Sun May 16 22:27:15 2021 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=e26a0889

emerge --fetchonly --quiet: use emerge-fetch.log when writable (bug 285614)

Closes: https://github.com/gentoo/portage/pull/707
Bug: https://bugs.gentoo.org/285614
Signed-off-by: James Stevenson <james.al.stevenson <AT> gmail.com>
Signed-off-by: Zac Medico <zmedico <AT> gentoo.org>

 lib/_emerge/EbuildBuild.py | 25 +++++++++++++++++++++----
 lib/_emerge/Scheduler.py   |  4 ++--
 2 files changed, 23 insertions(+), 6 deletions(-)

diff --git a/lib/_emerge/EbuildBuild.py b/lib/_emerge/EbuildBuild.py
index aeb8a252b..db85b20b2 100644
--- a/lib/_emerge/EbuildBuild.py
+++ b/lib/_emerge/EbuildBuild.py
@@ -23,6 +23,7 @@ from portage.package.ebuild.digestcheck import digestcheck
 from portage.package.ebuild.doebuild import _check_temp_dir
 from portage.package.ebuild._spawn_nofetch import SpawnNofetchWithoutBuilddir
 from portage.util._async.AsyncTaskFuture import AsyncTaskFuture
+from portage.util.path import first_existing
 
 
 class EbuildBuild(CompositeTask):
@@ -160,16 +161,32 @@ class EbuildBuild(CompositeTask):
                                                self._default_final_exit)
                                return
 
+                       quiet_setting = settings.get("PORTAGE_QUIET", False)
+                       fetch_log = None
+                       logwrite_access = False
+                       if quiet_setting:
+                               fetch_log = os.path.join(
+                                       _emerge.emergelog._emerge_log_dir, 
"emerge-fetch.log"
+                               )
+                               logwrite_access = 
os.access(first_existing(fetch_log), os.W_OK)
+
                        fetcher = EbuildFetcher(
                                config_pool=self.config_pool,
                                ebuild_path=self._ebuild_path,
                                fetchall=self.opts.fetch_all_uri,
                                fetchonly=self.opts.fetchonly,
-                               background=False,
-                               logfile=None,
+                               background=quiet_setting if logwrite_access 
else False,
+                               logfile=fetch_log if logwrite_access else None,
                                pkg=self.pkg,
-                               scheduler=self.scheduler)
-                       self._start_task(fetcher, self._fetchonly_exit)
+                               scheduler=self.scheduler,
+                       )
+
+                       if fetch_log and logwrite_access:
+                               fetcher.addExitListener(self._fetchonly_exit)
+                               self._task_queued(fetcher)
+                               self.scheduler.fetch.schedule(fetcher, 
force_queue=True)
+                       else:
+                               self._start_task(fetcher, self._fetchonly_exit)
                        return
 
                self._build_dir = EbuildBuildDir(

diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
index d3528ee68..5146863ab 100644
--- a/lib/_emerge/Scheduler.py
+++ b/lib/_emerge/Scheduler.py
@@ -560,7 +560,7 @@ class Scheduler(PollScheduler):
                        if pargs:
                                self.status = pargs[0]
 
-       def _schedule_fetch(self, fetcher):
+       def _schedule_fetch(self, fetcher, force_queue=False):
                """
                Schedule a fetcher, in order to control the number of concurrent
                fetchers. If self._max_jobs is greater than 1 then the fetch
@@ -571,7 +571,7 @@ class Scheduler(PollScheduler):
                would be required before it would be possible to enable
                concurrent fetching within the parallel-fetch queue.
                """
-               if self._max_jobs > 1:
+               if self._max_jobs > 1 and not force_queue:
                        fetcher.start()
                else:
                        self._task_queues.fetch.addFront(fetcher)

Reply via email to