commit:     eecd073d274c6d669f324cbb31151789d32f87fb
Author:     Sam James <sam <AT> gentoo <DOT> org>
AuthorDate: Sat Mar  5 05:57:25 2022 +0000
Commit:     Sam James <sam <AT> gentoo <DOT> org>
CommitDate: Wed Apr 13 03:05:45 2022 +0000
URL:        https://gitweb.gentoo.org/proj/portage.git/commit/?id=eecd073d

autoclean: only enable for global updates and depcleans

Closes: https://bugs.gentoo.org/792195
Signed-off-by: Sam James <sam <AT> gentoo.org>
Closes: https://github.com/gentoo/portage/pull/795
Signed-off-by: Sam James <sam <AT> gentoo.org>

 cnf/make.globals             |  2 +-
 lib/_emerge/actions.py       | 22 ++++++++++++++++------
 lib/portage/dbapi/vartree.py | 24 +++++-------------------
 3 files changed, 22 insertions(+), 26 deletions(-)

diff --git a/cnf/make.globals b/cnf/make.globals
index 69b365f71..f42cffe8b 100644
--- a/cnf/make.globals
+++ b/cnf/make.globals
@@ -101,7 +101,7 @@ EMERGE_WARNING_DELAY="10"
 
 # Automatically clean installed packages after they are updated.
 # This option will be removed and forced to yes.
-AUTOCLEAN="yes"
+AUTOCLEAN="no"
 
 PORTAGE_BZIP2_COMMAND="bzip2"
 

diff --git a/lib/_emerge/actions.py b/lib/_emerge/actions.py
index f82069f9a..e697459c8 100644
--- a/lib/_emerge/actions.py
+++ b/lib/_emerge/actions.py
@@ -672,12 +672,6 @@ def action_build(
                         ldpath_mtimes,
                         autoclean=1,
                     )
-                else:
-                    portage.writemsg_stdout(
-                        colorize("WARN", "WARNING:")
-                        + " AUTOCLEAN is disabled.  This can cause serious"
-                        + " problems due to overlapping packages.\n"
-                    )
 
         return retval
 
@@ -776,6 +770,15 @@ def action_depclean(
     # relatively safe to ignore missing deps when only asked to remove
     # specific packages.
 
+    # Force autoclean for depcleans (but not purges), as it was changed
+    # to default off to not run it on every unmerge.
+    # bug #792195
+    if action == "depclean":
+        settings.unlock()
+        settings["AUTOCLEAN"] = "yes"
+        settings.backup_changes("AUTOCLEAN")
+        settings.lock()
+
     msg = []
     if (
         "preserve-libs" not in settings.features
@@ -3386,6 +3389,13 @@ def run_action(emerge_config):
         # Reload the whole config from scratch.
         load_emerge_config(emerge_config=emerge_config)
 
+        # Let's autoclean if we applied updates, rather than always doing it
+        # bug #792195
+        emerge_config.target_config.settings.unlock()
+        emerge_config.target_config.settings["AUTOCLEAN"] = "yes"
+        emerge_config.target_config.settings.backup_changes("AUTOCLEAN")
+        emerge_config.target_config.settings.lock()
+
     xterm_titles = "notitles" not in 
emerge_config.target_config.settings.features
     if xterm_titles:
         xtermTitle("emerge")

diff --git a/lib/portage/dbapi/vartree.py b/lib/portage/dbapi/vartree.py
index 863efe9cc..190bf8c92 100644
--- a/lib/portage/dbapi/vartree.py
+++ b/lib/portage/dbapi/vartree.py
@@ -5086,21 +5086,18 @@ class dblink:
 
         emerge_log = self._emerge_log
 
-        # If we have any preserved libraries then autoclean
-        # is forced so that preserve-libs logic doesn't have
+        # We always autoclean now for the current package-case for simplicity.
+        # If it were conditional, we'd always need to do it when any 
preserved-libs,
+        # so that preserve-libs logic doesn't have
         # to account for the additional complexity of the
         # AUTOCLEAN=no mode.
-        autoclean = self.settings.get("AUTOCLEAN", "yes") == "yes" or 
preserve_paths
-
-        if autoclean:
-            emerge_log(_(" >>> AUTOCLEAN: %s") % (slot_atom,))
+        emerge_log(_(" >>> AUTOCLEAN: %s") % (slot_atom,))
 
         others_in_slot.append(self)  # self has just been merged
         for dblnk in list(others_in_slot):
             if dblnk is self:
                 continue
-            if not (autoclean or dblnk.mycpv == self.mycpv or reinstall_self):
-                continue
+
             showMessage(_(">>> Safely unmerging already-installed 
instance...\n"))
             emerge_log(_(" === Unmerging... (%s)") % (dblnk.mycpv,))
             others_in_slot.remove(dblnk)  # dblnk will unmerge itself now
@@ -5130,17 +5127,6 @@ class dblink:
                 self.unlockdb()
             showMessage(_(">>> Original instance of package unmerged 
safely.\n"))
 
-        if len(others_in_slot) > 1:
-            showMessage(
-                colorize("WARN", _("WARNING:"))
-                + _(
-                    " AUTOCLEAN is disabled.  This can cause serious"
-                    " problems due to overlapping packages.\n"
-                ),
-                level=logging.WARN,
-                noiselevel=-1,
-            )
-
         # We hold both directory locks.
         self.dbdir = self.dbpkgdir
         self.lockdb()

Reply via email to