diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 625b304ca1..96652ef5ae 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? + 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| tab = Tab.for_keg(keg) 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