Avoid realpath where it is not necessary

Symlinks in opt and LinkedKegs point directly at a keg in the cellar, so
only resolving one symlink should suffice, and make it clear what path
we are actually interested in.
This commit is contained in:
Jack Nagel 2014-04-05 12:17:19 -05:00
parent a44f725c8b
commit ce1f598e98
8 changed files with 13 additions and 13 deletions

View File

@ -213,7 +213,7 @@ end
def fixopt f
path = if f.linked_keg.directory? and f.linked_keg.symlink?
f.linked_keg.realpath
f.linked_keg.resolved_path
elsif f.prefix.directory?
f.prefix
elsif (kids = f.rack.children).size == 1 and kids.first.directory?

View File

@ -25,7 +25,7 @@ class Caveats
def keg
@keg ||= [f.prefix, f.opt_prefix, f.linked_keg].map do |d|
Keg.new(d.realpath) rescue nil
Keg.new(d.resolved_path) rescue nil
end.compact.first
end

View File

@ -13,8 +13,8 @@ module Homebrew extend self
notice += " with #{options * ", "}" unless options.empty?
oh1 notice
if (opt_link = f.opt_prefix).exist?
keg = Keg.new(opt_link.realpath)
if f.opt_prefix.directory?
keg = Keg.new(f.opt_prefix.resolved_path)
backup keg
end

View File

@ -54,7 +54,7 @@ module Homebrew extend self
end
def upgrade_formula f
outdated_keg = Keg.new(f.linked_keg.realpath) if f.linked_keg.directory?
outdated_keg = Keg.new(f.linked_keg.resolved_path) if f.linked_keg.directory?
fi = FormulaInstaller.new(f)
fi.options = Tab.for_formula(f).used_options

View File

@ -35,9 +35,9 @@ module HomebrewArgvExtension
opt_prefix = HOMEBREW_PREFIX/"opt"/name
if opt_prefix.symlink? && opt_prefix.directory?
Keg.new(opt_prefix.realpath)
Keg.new(opt_prefix.resolved_path)
elsif linked_keg_ref.symlink? && linked_keg_ref.directory?
Keg.new(linked_keg_ref.realpath)
Keg.new(linked_keg_ref.resolved_path)
elsif dirs.length == 1
Keg.new(dirs.first)
elsif (prefix = Formula.factory(canonical_name).prefix).directory?

View File

@ -493,7 +493,7 @@ class Formula
},
"revision" => revision,
"installed" => [],
"linked_keg" => (linked_keg.realpath.basename.to_s if linked_keg.exist?),
"linked_keg" => (linked_keg.resolved_path.basename.to_s if linked_keg.exist?),
"keg_only" => keg_only?,
"dependencies" => deps.map(&:name),
"conflicts_with" => conflicts.map(&:name),

View File

@ -147,7 +147,7 @@ class FormulaInstaller
if f.linked_keg.directory?
# some other version is already installed *and* linked
raise CannotInstallFormulaError, <<-EOS.undent
#{f}-#{f.linked_keg.realpath.basename} already installed
#{f}-#{f.linked_keg.resolved_path.basename} already installed
To install this version, first `brew unlink #{f}'
EOS
end
@ -360,7 +360,7 @@ class FormulaInstaller
tab = Tab.for_formula(df)
if df.linked_keg.directory?
linked_keg = Keg.new(df.linked_keg.realpath)
linked_keg = Keg.new(df.linked_keg.resolved_path)
linked_keg.unlink
end
@ -545,7 +545,7 @@ class FormulaInstaller
end
def link
if f.linked_keg.directory? and f.linked_keg.realpath == f.prefix
if f.linked_keg.directory? and f.linked_keg.resolved_path == f.prefix
opoo "This keg was marked linked already, continuing anyway"
# otherwise Keg.link will bail
f.linked_keg.unlink

View File

@ -87,7 +87,7 @@ class Keg < Pathname
end
def linked?
linked_keg_record.directory? and self == linked_keg_record.realpath
linked_keg_record.directory? && self == linked_keg_record.resolved_path
end
def completion_installed? shell
@ -125,7 +125,7 @@ class Keg < Pathname
end
def link mode=OpenStruct.new
raise "Cannot link #{fname}\nAnother version is already linked: #{linked_keg_record.realpath}" if linked_keg_record.directory?
raise "Cannot link #{fname}\nAnother version is already linked: #{linked_keg_record.resolved_path}" if linked_keg_record.directory?
ObserverPathnameExtension.reset_counts!