From 4b2c4ef25835a87b5bac4fb26eae91dbfed93863 Mon Sep 17 00:00:00 2001
From: Vlad Shablinsky <vladshablinsky@gmail.com>
Date: Sat, 16 Jul 2016 15:31:03 +0300
Subject: [PATCH] Update and test eligible_kegs_for_cleanup

Closes #478.

Signed-off-by: Xu Cheng <xucheng@me.com>
---
 Library/Homebrew/formula.rb           |  7 ++++++-
 Library/Homebrew/test/test_formula.rb | 24 ++++++++++++++++++++++++
 2 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index cb27e94921..5e8232d972 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -1521,7 +1521,12 @@ class Formula
   def eligible_kegs_for_cleanup
     eligible_for_cleanup = []
     if installed?
-      eligible_kegs = installed_kegs.select { |k| pkg_version > k.version }
+      eligible_kegs = if head? && (head_prefix = latest_head_prefix)
+        installed_kegs - [Keg.new(head_prefix)]
+      else
+        installed_kegs.select { |k| pkg_version > k.version }
+      end
+
       if eligible_kegs.any?
         eligible_kegs.each do |keg|
           if keg.linked?
diff --git a/Library/Homebrew/test/test_formula.rb b/Library/Homebrew/test/test_formula.rb
index c5175e27e6..d586481f5b 100644
--- a/Library/Homebrew/test/test_formula.rb
+++ b/Library/Homebrew/test/test_formula.rb
@@ -451,6 +451,30 @@ class FormulaTests < Homebrew::TestCase
     f3.rack.rmtree
   end
 
+  def test_eligible_kegs_for_cleanup_head_installed
+    f = formula do
+      version "0.1"
+      head "foo"
+    end
+
+    stable_prefix = f.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}")
+      prefix.mkpath
+      tab = Tab.empty
+      tab.tabfile = prefix.join("INSTALL_RECEIPT.json")
+      tab.source_modified_time = stamp
+      tab.write
+    end
+
+    eligible_kegs = f.installed_kegs - [Keg.new(f.prefix("HEAD-111111_1"))]
+    assert_equal eligible_kegs, f.eligible_kegs_for_cleanup
+  ensure
+    f.rack.rmtree
+  end
+
   def test_pour_bottle
     f_false = formula("foo") do
       url "foo-1.0"
-- 
GitLab