commit:     81f2615d603108def204041c5d3e3e1058ada4c1
Author:     Jethro Donaldson <devel <AT> jro <DOT> nz>
AuthorDate: Wed Dec  3 10:36:16 2025 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Feb 16 06:54:15 2026 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=81f2615d

output: add 'g' symbol to indicate remote binary with --getbinpkg

Provide visual feedback to the user as to whether a selected binary
package is local or remote. The symbol 'g' is used to indicate that
a remote binary will be fetched due to --getbinpkg, and is shown in
the same place as 'f' or 'F'. These flags represent a similar concept
yet should never shown for remote binaries, but will still be shown
preferentially should they somehow be applicable.

Signed-off-by: Jethro Donaldson <devel <AT> jro.nz>
Part-of: https://github.com/gentoo/portage/pull/1527
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/_emerge/Package.py                 | 6 ++++++
 lib/_emerge/resolver/output.py         | 3 +++
 lib/_emerge/resolver/output_helpers.py | 8 ++++++--
 man/emerge.1                           | 1 +
 4 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/lib/_emerge/Package.py b/lib/_emerge/Package.py
index 79011380d5..c397d10508 100644
--- a/lib/_emerge/Package.py
+++ b/lib/_emerge/Package.py
@@ -41,6 +41,7 @@ class Package(Task):
         "iuse",
         "mtime",
         "pf",
+        "remote",
         "root",
         "slot",
         "sub_slot",
@@ -116,6 +117,11 @@ class Package(Task):
                 raise
             db = self.root_config.trees["porttree"].dbapi
 
+        if self.type_name == "binary":
+            self.remote = db.bintree.isremote(self.cpv)
+        else:
+            self.remote = False
+
         self.cpv = _pkg_str(
             self.cpv, metadata=self._metadata, 
settings=self.root_config.settings, db=db
         )

diff --git a/lib/_emerge/resolver/output.py b/lib/_emerge/resolver/output.py
index 780642c6d2..5a36dc2faf 100644
--- a/lib/_emerge/resolver/output.py
+++ b/lib/_emerge/resolver/output.py
@@ -677,6 +677,9 @@ class Display:
                 if pkg_info.ebuild_path is not None:
                     self.restrict_fetch_list[pkg] = pkg_info
 
+        if pkg.type_name == "binary":
+            pkg_info.attr_display.remote_binary = pkg.remote
+
         if self.vardb.cpv_exists(pkg.cpv):
             # Do a cpv match first, in case the SLOT has changed.
             pkg_info.previous_pkg = self.vardb.match_pkgs(Atom("=" + 
pkg.cpv))[0]

diff --git a/lib/_emerge/resolver/output_helpers.py 
b/lib/_emerge/resolver/output_helpers.py
index fe8daafd70..a5d082d8e0 100644
--- a/lib/_emerge/resolver/output_helpers.py
+++ b/lib/_emerge/resolver/output_helpers.py
@@ -18,6 +18,7 @@ from portage.output import (
     colorize,
     create_color_func,
     green,
+    fuchsia,
     red,
     teal,
     turquoise,
@@ -596,6 +597,7 @@ class PkgAttrDisplay(SlotObject):
         "new_slot",
         "new_version",
         "replace",
+        "remote_binary",
     )
 
     def __str__(self):
@@ -622,11 +624,13 @@ class PkgAttrDisplay(SlotObject):
         else:
             output.append(" ")
 
-        if self.fetch_restrict or self.fetch_restrict_satisfied:
+        if self.fetch_restrict or self.fetch_restrict_satisfied or 
self.remote_binary:
             if self.fetch_restrict_satisfied:
                 output.append(green("f"))
-            else:
+            elif self.fetch_restrict:
                 output.append(red("F"))
+            else:
+                output.append(fuchsia("g"))
         else:
             output.append(" ")
 

diff --git a/man/emerge.1 b/man/emerge.1
index 2006f1ba2e..4ed28e67b1 100644
--- a/man/emerge.1
+++ b/man/emerge.1
@@ -861,6 +861,7 @@ r   reinstall (forced for some reason, possibly due to slot 
or sub\-slot)
 R      replacing (remerging same version)
 F      fetch restricted (must be manually downloaded)
 f      fetch restricted (already downloaded)
+g      remote binary (automatically download from binhost)
 I      interactive (requires user input)
 B      blocked by another package (unresolved conflict)
 b      blocked by another package (automatically resolved conflict)

Reply via email to