From d0251c1abc3d63513c8b07647607e3a5654caedb Mon Sep 17 00:00:00 2001
From: Mike McQuaid <mike@mikemcquaid.com>
Date: Wed, 10 Aug 2016 08:48:30 +0100
Subject: [PATCH] formulary: fix to_rack for fully-scoped references

Fixes the case where I have `mysql56` installed but do
`brew uninstall foo/bar/mysql56` which isn't a valid formula.

Fixes https://github.com/Homebrew/legacy-homebrew/issues/39883.
---
 Library/Homebrew/formulary.rb           | 7 +++++--
 Library/Homebrew/test/test_formulary.rb | 9 +++++++++
 2 files changed, 14 insertions(+), 2 deletions(-)

diff --git a/Library/Homebrew/formulary.rb b/Library/Homebrew/formulary.rb
index f7a4be817f..9d385fc514 100644
--- a/Library/Homebrew/formulary.rb
+++ b/Library/Homebrew/formulary.rb
@@ -256,12 +256,15 @@ class Formulary
   end
 
   def self.to_rack(ref)
-    # First, check whether the rack with the given name exists.
+    # If using a fully-scoped reference, check if the formula can be resolved.
+    factory(ref) if ref.include? "/"
+
+    # Check whether the rack with the given name exists.
     if (rack = HOMEBREW_CELLAR/File.basename(ref, ".rb")).directory?
       return rack.resolved_path
     end
 
-    # Second, use canonical name to locate rack.
+    # Use canonical name to locate rack.
     (HOMEBREW_CELLAR/canonical_name(ref)).resolved_path
   end
 
diff --git a/Library/Homebrew/test/test_formulary.rb b/Library/Homebrew/test/test_formulary.rb
index 7c7ad3e74a..7a3ab65e0a 100644
--- a/Library/Homebrew/test/test_formulary.rb
+++ b/Library/Homebrew/test/test_formulary.rb
@@ -111,6 +111,15 @@ class FormularyFactoryTest < Homebrew::TestCase
   def test_load_from_contents
     assert_kind_of Formula, Formulary.from_contents(@name, @path, @path.read)
   end
+
+  def test_to_rack
+    assert_equal HOMEBREW_CELLAR/@name, Formulary.to_rack(@name)
+    (HOMEBREW_CELLAR/@name).mkpath
+    assert_equal HOMEBREW_CELLAR/@name, Formulary.to_rack(@name)
+    assert_raises(TapFormulaUnavailableError) { Formulary.to_rack("a/b/#{@name}") }
+  ensure
+    FileUtils.rm_rf HOMEBREW_CELLAR/@name
+  end
 end
 
 class FormularyTapFactoryTest < Homebrew::TestCase
-- 
GitLab