Merge pull request #1677 from MikeMcQuaid/formula-prefix-opt

formula: make prefix usually return opt_prefix.
This commit is contained in:
Mike McQuaid 2017-01-03 20:10:22 +00:00 committed by GitHub
commit fc11f633b2
4 changed files with 21 additions and 5 deletions

View File

@ -11,7 +11,7 @@ module Homebrew
if ARGV.named.empty? if ARGV.named.empty?
puts HOMEBREW_PREFIX puts HOMEBREW_PREFIX
else else
puts ARGV.resolved_formulae.map { |f| f.opt_prefix.exist? ? f.opt_prefix : f.installed_prefix } puts ARGV.resolved_formulae.map(&:installed_prefix)
end end
end end
end end

View File

@ -198,6 +198,7 @@ class Formula
@build = active_spec.build @build = active_spec.build
@pin = FormulaPin.new(self) @pin = FormulaPin.new(self)
@follow_installed_alias = true @follow_installed_alias = true
@versioned_prefix = false
end end
# @private # @private
@ -548,9 +549,16 @@ class Formula
end end
# The directory in the cellar that the formula is installed to. # The directory in the cellar that the formula is installed to.
# This directory contains the formula's name and version. # This directory points to {#opt_prefix} if it exists and if #{prefix} is not
# 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) def prefix(v = pkg_version)
Pathname.new("#{HOMEBREW_CELLAR}/#{name}/#{v}") prefix = rack/v
if !@versioned_prefix && prefix.directory? && Keg.new(prefix).optlinked?
opt_prefix
else
prefix
end
end end
# Is the formula linked? # Is the formula linked?
@ -579,7 +587,7 @@ class Formula
# installed versions of this software # installed versions of this software
# @private # @private
def rack def rack
prefix.parent Pathname.new("#{HOMEBREW_CELLAR}/#{name}")
end end
# All currently installed prefix directories. # All currently installed prefix directories.
@ -994,6 +1002,7 @@ class Formula
# @private # @private
def run_post_install def run_post_install
@versioned_prefix = true
build = self.build build = self.build
self.build = Tab.for_formula(self) self.build = Tab.for_formula(self)
old_tmpdir = ENV["TMPDIR"] old_tmpdir = ENV["TMPDIR"]
@ -1008,6 +1017,7 @@ class Formula
ENV["TMPDIR"] = old_tmpdir ENV["TMPDIR"] = old_tmpdir
ENV["TEMP"] = old_temp ENV["TEMP"] = old_temp
ENV["TMP"] = old_tmp ENV["TMP"] = old_tmp
@versioned_prefix = false
end end
# Tell the user about any caveats regarding this package. # Tell the user about any caveats regarding this package.
@ -1110,6 +1120,7 @@ class Formula
# where staging is a Mktemp staging context # where staging is a Mktemp staging context
# @private # @private
def brew def brew
@versioned_prefix = true
stage do |staging| stage do |staging|
staging.retain! if ARGV.keep_tmp? staging.retain! if ARGV.keep_tmp?
prepare_patches prepare_patches
@ -1123,6 +1134,8 @@ class Formula
cp Dir["config.log", "CMakeCache.txt"], logs cp Dir["config.log", "CMakeCache.txt"], logs
end end
end end
ensure
@versioned_prefix = false
end end
# @private # @private
@ -1624,6 +1637,7 @@ class Formula
# @private # @private
def run_test def run_test
@versioned_prefix = true
old_home = ENV["HOME"] old_home = ENV["HOME"]
old_curl_home = ENV["CURL_HOME"] old_curl_home = ENV["CURL_HOME"]
old_tmpdir = ENV["TMPDIR"] old_tmpdir = ENV["TMPDIR"]
@ -1655,6 +1669,7 @@ class Formula
ENV["TEMP"] = old_temp ENV["TEMP"] = old_temp
ENV["TMP"] = old_tmp ENV["TMP"] = old_tmp
ENV["TERM"] = old_term ENV["TERM"] = old_term
@versioned_prefix = false
end end
# @private # @private

View File

@ -546,7 +546,7 @@ class FormulaInstaller
def summary def summary
s = "" s = ""
s << "#{Emoji.install_badge} " if Emoji.enabled? s << "#{Emoji.install_badge} " if Emoji.enabled?
s << "#{formula.prefix}: #{formula.prefix.abv}" s << "#{formula.prefix.resolved_path}: #{formula.prefix.abv}"
s << ", built in #{pretty_duration build_time}" if build_time s << ", built in #{pretty_duration build_time}" if build_time
s s
end end

View File

@ -175,6 +175,7 @@ class Keg
protected :path protected :path
def initialize(path) def initialize(path)
path = path.resolved_path if path.to_s.start_with?("#{HOMEBREW_PREFIX}/opt/")
raise "#{path} is not a valid keg" unless path.parent.parent.realpath == HOMEBREW_CELLAR.realpath raise "#{path} is not a valid keg" unless path.parent.parent.realpath == HOMEBREW_CELLAR.realpath
raise "#{path} is not a directory" unless path.directory? raise "#{path} is not a directory" unless path.directory?
@path = path @path = path