From 16e725291d1914b30ef8769a0b4ae4352bce5924 Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Tue, 25 May 2021 11:15:14 -0400 Subject: [PATCH 1/5] Don't uninstall older versions with `--HEAD` --- Library/Homebrew/cmd/install.rb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index c7d079cb84..9f38879226 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -322,7 +322,8 @@ module Homebrew installed_formulae.each do |f| Migrator.migrate_if_needed(f, force: args.force?) install_formula(f, args: args) - Cleanup.install_formula_clean!(f) + # Don't uninstall older keg(s) if installing HEAD keg(s). + Cleanup.install_formula_clean!(f) unless args.HEAD? end Upgrade.check_installed_dependents( From 2cf236630b079d3ecbd7e9091b5906e98be9d18b Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 28 May 2021 09:10:15 -0400 Subject: [PATCH 2/5] Revert "Don't uninstall older versions with `--HEAD`" This reverts commit b9b78478dbaf32605623563604b6fde8a8f3eeec. --- Library/Homebrew/cmd/install.rb | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Library/Homebrew/cmd/install.rb b/Library/Homebrew/cmd/install.rb index 9f38879226..c7d079cb84 100644 --- a/Library/Homebrew/cmd/install.rb +++ b/Library/Homebrew/cmd/install.rb @@ -322,8 +322,7 @@ module Homebrew installed_formulae.each do |f| Migrator.migrate_if_needed(f, force: args.force?) install_formula(f, args: args) - # Don't uninstall older keg(s) if installing HEAD keg(s). - Cleanup.install_formula_clean!(f) unless args.HEAD? + Cleanup.install_formula_clean!(f) end Upgrade.check_installed_dependents( From e4ffad629ce4ef7a7726117ad6ebb7654e9d68b8 Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 28 May 2021 10:00:36 -0400 Subject: [PATCH 3/5] Don't uninstall latest non-`head` with `--HEAD` --- Library/Homebrew/formula.rb | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 625b304ca1..d19f0a4411 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2181,8 +2181,10 @@ class Formula def eligible_kegs_for_cleanup(quiet: false) eligible_for_cleanup = [] if latest_version_installed? - eligible_kegs = if head? && (head_prefix = latest_head_prefix) - installed_kegs - [Keg.new(head_prefix)] + eligible_kegs = if head? + # Remove latest head and stable kegs + head, stable = installed_kegs.partition { |k| k.version.head? } + head.sort_by(&:version).slice(0...-1) + stable.sort_by(&:version).slice(0...-1) else installed_kegs.select do |keg| tab = Tab.for_keg(keg) From 0da4c4e3ce069bf21d0837667f43f48e69b8a56b Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 28 May 2021 11:24:51 -0400 Subject: [PATCH 4/5] Update tests --- Library/Homebrew/test/formula_spec.rb | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Library/Homebrew/test/formula_spec.rb b/Library/Homebrew/test/formula_spec.rb index 9bb030b43f..2f13cd771e 100644 --- a/Library/Homebrew/test/formula_spec.rb +++ b/Library/Homebrew/test/formula_spec.rb @@ -928,20 +928,17 @@ describe Formula do head("foo") end - stable_prefix = f.latest_installed_prefix - stable_prefix.mkpath - - [["000000_1", 1], ["111111", 2], ["111111_1", 2]].each do |pkg_version_suffix, stamp| - prefix = f.prefix("HEAD-#{pkg_version_suffix}") + ["0.0.1", "0.0.2", "0.1", "HEAD-000000", "HEAD-111111", "HEAD-111111_1"].each do |version| + prefix = f.prefix(version) prefix.mkpath tab = Tab.empty tab.tabfile = prefix/Tab::FILENAME - tab.source_modified_time = stamp + tab.source_modified_time = 1 tab.write end - eligible_kegs = f.installed_kegs - [Keg.new(f.prefix("HEAD-111111_1"))] - expect(f.eligible_kegs_for_cleanup).to eq(eligible_kegs) + eligible_kegs = f.installed_kegs - [Keg.new(f.prefix("HEAD-111111_1")), Keg.new(f.prefix("0.1"))] + expect(f.eligible_kegs_for_cleanup.sort_by(&:version)).to eq(eligible_kegs.sort_by(&:version)) end end From ab822ced36e2075b8c49cad9ccdbe737d7f526e4 Mon Sep 17 00:00:00 2001 From: Connor Mann Date: Fri, 28 May 2021 11:34:36 -0400 Subject: [PATCH 5/5] Update comment --- Library/Homebrew/formula.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index d19f0a4411..96652ef5ae 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2182,8 +2182,8 @@ class Formula eligible_for_cleanup = [] if latest_version_installed? eligible_kegs = if head? - # Remove latest head and stable kegs head, stable = installed_kegs.partition { |k| k.version.head? } + # Remove newest head and stable kegs head.sort_by(&:version).slice(0...-1) + stable.sort_by(&:version).slice(0...-1) else installed_kegs.select do |keg|