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()