From 6195d6592b7374e135440025c82ae19cf37f30af Mon Sep 17 00:00:00 2001 From: ilovezfs Date: Wed, 4 Jan 2017 10:23:15 -0800 Subject: formula: realpath prefix before computing abv versioned prefix is a directory, but unversioned is a symlink, so realpath it before computing abv --- Library/Homebrew/formula.rb | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'Library/Homebrew/formula.rb') diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index eb85f804f..dcee0de85 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -553,7 +553,7 @@ class Formula # called from within the same formula's {#install} or {#post_install} methods. # Otherwise, return the full path to the formula's versioned cellar. def prefix(v = pkg_version) - prefix = rack/v + prefix = FormulaPrefixPathname.new(rack/v) if !@versioned_prefix && prefix.directory? && Keg.new(prefix).optlinked? opt_prefix else @@ -938,7 +938,7 @@ class Formula # formula, as the path is stable even when the software is updated. #
args << "--with-readline=#{Formula["readline"].opt_prefix}" if build.with? "readline"
def opt_prefix - Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}") + FormulaPrefixPathname.new("#{HOMEBREW_PREFIX}/opt/#{name}") end def opt_bin @@ -2423,4 +2423,10 @@ class Formula @link_overwrite_paths ||= Set.new end end + + class FormulaPrefixPathname < Pathname + def abv + Pathname.new(realpath).abv + end + end end -- cgit v1.2.3 From a68d38743abc2351a9468dcec70174fdfe38cf94 Mon Sep 17 00:00:00 2001 From: ilovezfs Date: Wed, 4 Jan 2017 10:27:39 -0800 Subject: formula: make prefix_linked? use versioned prefix otherwise whenever prefix is unversioned, prefix_Linked will be false --- Library/Homebrew/formula.rb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'Library/Homebrew/formula.rb') diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index dcee0de85..cad8a693f 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -574,7 +574,10 @@ class Formula # Is formula's linked keg points to the prefix. def prefix_linked?(v = pkg_version) return false unless linked? - linked_keg.resolved_path == prefix(v) + @versioned_prefix = true + result = linked_keg.resolved_path == prefix(v) + @versioned_prefix = false + result end # {PkgVersion} of the linked keg for the formula. -- cgit v1.2.3 From 1a4ff22447f73ddfda069453571bd91f8ebd367a Mon Sep 17 00:00:00 2001 From: Mike McQuaid Date: Fri, 6 Jan 2017 08:50:35 +0000 Subject: formula: tweak versioned prefix approach. --- Library/Homebrew/formula.rb | 40 +++++++++++++++++++--------------------- 1 file changed, 19 insertions(+), 21 deletions(-) (limited to 'Library/Homebrew/formula.rb') diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index cad8a693f..85add1b43 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -198,7 +198,7 @@ class Formula @build = active_spec.build @pin = FormulaPin.new(self) @follow_installed_alias = true - @versioned_prefix = false + @prefix_returns_versioned_prefix = false end # @private @@ -553,11 +553,12 @@ class Formula # called from within the same formula's {#install} or {#post_install} methods. # Otherwise, return the full path to the formula's versioned cellar. def prefix(v = pkg_version) - prefix = FormulaPrefixPathname.new(rack/v) - if !@versioned_prefix && prefix.directory? && Keg.new(prefix).optlinked? + versioned_prefix = versioned_prefix(v) + if !@prefix_returns_versioned_prefix && v == pkg_version && + versioned_prefix.directory? && Keg.new(versioned_prefix).optlinked? opt_prefix else - prefix + versioned_prefix end end @@ -574,10 +575,7 @@ class Formula # Is formula's linked keg points to the prefix. def prefix_linked?(v = pkg_version) return false unless linked? - @versioned_prefix = true - result = linked_keg.resolved_path == prefix(v) - @versioned_prefix = false - result + linked_keg.resolved_path == versioned_prefix(v) end # {PkgVersion} of the linked keg for the formula. @@ -941,7 +939,7 @@ class Formula # formula, as the path is stable even when the software is updated. #
args << "--with-readline=#{Formula["readline"].opt_prefix}" if build.with? "readline"
def opt_prefix - FormulaPrefixPathname.new("#{HOMEBREW_PREFIX}/opt/#{name}") + Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}") end def opt_bin @@ -1005,7 +1003,7 @@ class Formula # @private def run_post_install - @versioned_prefix = true + @prefix_returns_versioned_prefix = true build = self.build self.build = Tab.for_formula(self) old_tmpdir = ENV["TMPDIR"] @@ -1020,7 +1018,7 @@ class Formula ENV["TMPDIR"] = old_tmpdir ENV["TEMP"] = old_temp ENV["TMP"] = old_tmp - @versioned_prefix = false + @prefix_returns_versioned_prefix = false end # Tell the user about any caveats regarding this package. @@ -1123,7 +1121,7 @@ class Formula # where staging is a Mktemp staging context # @private def brew - @versioned_prefix = true + @prefix_returns_versioned_prefix = true stage do |staging| staging.retain! if ARGV.keep_tmp? prepare_patches @@ -1138,7 +1136,7 @@ class Formula end end ensure - @versioned_prefix = false + @prefix_returns_versioned_prefix = false end # @private @@ -1640,7 +1638,7 @@ class Formula # @private def run_test - @versioned_prefix = true + @prefix_returns_versioned_prefix = true old_home = ENV["HOME"] old_curl_home = ENV["CURL_HOME"] old_tmpdir = ENV["TMPDIR"] @@ -1672,7 +1670,7 @@ class Formula ENV["TEMP"] = old_temp ENV["TMP"] = old_tmp ENV["TERM"] = old_term - @versioned_prefix = false + @prefix_returns_versioned_prefix = false end # @private @@ -1857,6 +1855,12 @@ class Formula private + # Returns the prefix for a given formula version number. + # @private + def versioned_prefix(v) + rack/v + end + def exec_cmd(cmd, args, out, logfn) ENV["HOMEBREW_CC_LOG_PATH"] = logfn @@ -2426,10 +2430,4 @@ class Formula @link_overwrite_paths ||= Set.new end end - - class FormulaPrefixPathname < Pathname - def abv - Pathname.new(realpath).abv - end - end end -- cgit v1.2.3