commit:     6d1ee2c4f1ccd1bc783a6433a22166dbcfdd21e9
Author:     Florian Schmaus <flow <AT> gentoo <DOT> org>
AuthorDate: Tue Jun 18 09:27:55 2024 +0000
Commit:     James Le Cuirot <chewi <AT> gentoo <DOT> org>
CommitDate: Fri Aug  2 13:34:57 2024 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=6d1ee2c4

JobStatusDisplay: show length of merge-wait queue

Since FEATURES=merge-wait is now the default, the length of the
merge-wait queue becomes more relevant. Hence show it as part of
portage's job status display.

Signed-off-by: Florian Schmaus <flow <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/1347
Signed-off-by: James Le Cuirot <chewi <AT> gentoo.org>

 NEWS                            |  1 +
 lib/_emerge/JobStatusDisplay.py | 10 +++++++++-
 lib/_emerge/Scheduler.py        |  3 +++
 3 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/NEWS b/NEWS
index e8ba29df68..04ce6069db 100644
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ Features:
 * emerge: Make bare --root-deps option install build-time dependencies to ROOT
   as well as / for all EAPIs rather than instead of / for EAPI 6 and below
   (bug #435066).
+* Show length of merge-wait queue as part of the status display
 
 Bug fixes:
 * ebuild: Handle Bash 5.2's change in behavior which enables the shopt

diff --git a/lib/_emerge/JobStatusDisplay.py b/lib/_emerge/JobStatusDisplay.py
index 9cf3c41db4..f9e034c6e5 100644
--- a/lib/_emerge/JobStatusDisplay.py
+++ b/lib/_emerge/JobStatusDisplay.py
@@ -1,4 +1,4 @@
-# Copyright 1999-2020 Gentoo Authors
+# Copyright 1999-2024 Gentoo Authors
 # Distributed under the terms of the GNU General Public License v2
 
 import io
@@ -38,6 +38,7 @@ class JobStatusDisplay:
         object.__setattr__(self, "quiet", quiet)
         object.__setattr__(self, "xterm_titles", xterm_titles)
         object.__setattr__(self, "maxval", 0)
+        object.__setattr__(self, "merge_wait", 0)
         object.__setattr__(self, "merges", 0)
         object.__setattr__(self, "_changed", False)
         object.__setattr__(self, "_displayed", False)
@@ -262,6 +263,13 @@ class JobStatusDisplay:
             f.pop_style()
             f.add_literal_data(" failed")
 
+        if self.merge_wait:
+            f.add_literal_data(", ")
+            f.push_style(number_style)
+            f.add_literal_data(f"{self.merge_wait}")
+            f.pop_style()
+            f.add_literal_data(" merge wait")
+
         padding = self._jobs_column_width - len(plain_output.getvalue())
         if padding > 0:
             f.add_literal_data(padding * " ")

diff --git a/lib/_emerge/Scheduler.py b/lib/_emerge/Scheduler.py
index e23ebeb7ac..283144b55a 100644
--- a/lib/_emerge/Scheduler.py
+++ b/lib/_emerge/Scheduler.py
@@ -1559,6 +1559,7 @@ class Scheduler(PollScheduler):
             self._deallocate_config(build.settings)
         self._jobs -= 1
         self._status_display.running = self._jobs
+        self._status_display.merge_wait = len(self._merge_wait_queue)
         self._schedule()
 
     def _extract_exit(self, build):
@@ -1836,6 +1837,8 @@ class Scheduler(PollScheduler):
                     if task.is_system_pkg:
                         break
 
+                self._status_display.merge_wait = len(self._merge_wait_queue)
+
             if self._schedule_tasks_imp():
                 state_change += 1
 

Reply via email to