commit:     2047e3e9e5676fd02d97a724dbb986e268366930
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Mon Feb 16 05:29:10 2026 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Mon Feb 16 06:01:34 2026 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=2047e3e9

emaint: sync: prepare _check_updates for multiple packages

_check_updates currently warns if there's an update for Portage available
after syncing. Prepare it for multiple package support.

While here, add a docstring and return earlier if --quiet.

Bug: https://bugs.gentoo.org/968578
Signed-off-by: Sam James <sam <AT> gentoo.org>

 lib/portage/emaint/modules/sync/sync.py | 119 +++++++++++++++++---------------
 1 file changed, 65 insertions(+), 54 deletions(-)

diff --git a/lib/portage/emaint/modules/sync/sync.py 
b/lib/portage/emaint/modules/sync/sync.py
index b86f88e29b..787d66cec3 100644
--- a/lib/portage/emaint/modules/sync/sync.py
+++ b/lib/portage/emaint/modules/sync/sync.py
@@ -286,73 +286,84 @@ class SyncRepos:
                 self._reload_config()
 
     def _check_updates(self):
-        from _emerge.chk_updated_cfg_files import chk_updated_cfg_files
+        """
+        After syncing, notify the user if any important packages
+        have updates available that should be installed first before
+        anything else.
 
-        best_portage_pv = 
self.emerge_config.target_config.trees["porttree"].dbapi.xmatch(
-            "bestmatch-visible", portage.const.PORTAGE_PACKAGE_ATOM
-        )
-        installed_portage_pv = portage.best(
-            self.emerge_config.target_config.trees["vartree"].dbapi.match(
-                portage.const.PORTAGE_PACKAGE_ATOM
-            )
-        )
-        try:
-            old_use = (
-                self.emerge_config.target_config.trees["vartree"]
-                .dbapi.aux_get(installed_portage_pv, ["USE"])[0]
-                .split()
-            )
-        except KeyError:
-            old_use = ()
+        Portage always includes itself in this list to check.
+        """
+        from _emerge.chk_updated_cfg_files import chk_updated_cfg_files
 
         chk_updated_cfg_files(
             self.emerge_config.target_config.root,
             self.emerge_config.target_config.settings.get("CONFIG_PROTECT", 
"").split(),
         )
 
+        early_update_packages = {
+            "Portage": portage.const.PORTAGE_PACKAGE_ATOM,
+        }
         msgs = []
-        if (
-            not (best_portage_pv and installed_portage_pv)
-            or best_portage_pv == installed_portage_pv
-            or "--quiet" in self.emerge_config.opts
-        ):
-            return msgs
 
-        # Suggest to update to the latest available version of portage.
-        # Since changes to PYTHON_TARGETS cause complications, this message
-        # is suppressed if the new version has different PYTHON_TARGETS enabled
-        # than previous version.
-        portdb = self.emerge_config.target_config.trees["porttree"].dbapi
-        portdb.doebuild_settings.setcpv(best_portage_pv, mydb=portdb)
-        usemask = portdb.doebuild_settings.usemask
-        useforce = portdb.doebuild_settings.useforce
-        new_use = (
-            frozenset(portdb.doebuild_settings["PORTAGE_USE"].split()) | 
useforce
-        ) - usemask
-        new_python_targets = frozenset(
-            x for x in new_use if x.startswith("python_targets_")
-        )
-        old_python_targets = frozenset(
-            x for x in old_use if x.startswith("python_targets_")
-        )
+        if "--quiet" in self.emerge_config.opts:
+            return msgs
 
-        if new_python_targets == old_python_targets:
-            msgs.append("")
-            msgs.append(
-                warn(" * ")
-                + bold("An update to portage is available.")
-                + " It is _highly_ recommended"
+        for early_name, early_pkg in early_update_packages.items():
+            best_pv = 
self.emerge_config.target_config.trees["porttree"].dbapi.xmatch(
+                "bestmatch-visible", early_pkg
             )
-            msgs.append(
-                warn(" * ")
-                + "that you update portage now, before any other packages are 
updated."
+            installed_pv = portage.best(
+                
self.emerge_config.target_config.trees["vartree"].dbapi.match(early_pkg)
             )
-            msgs.append("")
-            msgs.append(
-                warn(" * ")
-                + "To update portage, run 'emerge --oneshot sys-apps/portage' 
now."
+
+            try:
+                old_use = (
+                    self.emerge_config.target_config.trees["vartree"]
+                    .dbapi.aux_get(installed_pv, ["USE"])[0]
+                    .split()
+                )
+            except KeyError:
+                old_use = ()
+
+            if not (best_pv and installed_pv) or best_pv == installed_pv:
+                continue
+
+            # Suggest to update to the latest available version of portage.
+            # Since changes to PYTHON_TARGETS cause complications, this message
+            # is suppressed if the new version has different PYTHON_TARGETS 
enabled
+            # than previous version.
+            portdb = self.emerge_config.target_config.trees["porttree"].dbapi
+            portdb.doebuild_settings.setcpv(best_pv, mydb=portdb)
+            usemask = portdb.doebuild_settings.usemask
+            useforce = portdb.doebuild_settings.useforce
+            new_use = (
+                frozenset(portdb.doebuild_settings["PORTAGE_USE"].split()) | 
useforce
+            ) - usemask
+            new_python_targets = frozenset(
+                x for x in new_use if x.startswith("python_targets_")
+            )
+            old_python_targets = frozenset(
+                x for x in old_use if x.startswith("python_targets_")
             )
-            msgs.append("")
+
+            if new_python_targets == old_python_targets:
+                msgs.append("")
+                msgs.append(
+                    warn(" * ")
+                    + bold(f"An update to {early_name} is available.")
+                    + " It is _highly_ recommended"
+                )
+                msgs.append(
+                    warn(" * ")
+                    + f"that you update {early_name} now, before any other 
packages are updated."
+                )
+                msgs.append("")
+                msgs.append(
+                    warn(" * ")
+                    + f"To update {early_name}, run 'emerge --oneshot 
{early_pkg}' now."
+                )
+                msgs.append("")
+
         return msgs
 
     def _reload_config(self):

Reply via email to