Avoid expensive Pathname concatenation

This commit is contained in:
Jack Nagel 2013-04-15 15:00:57 -05:00
parent 841c8bedca
commit 49682e854d
4 changed files with 30 additions and 27 deletions

View File

@ -37,13 +37,13 @@ class CurlDownloadStrategy < AbstractDownloadStrategy
super
if name.to_s.empty? || name == '__UNKNOWN__'
@tarball_path = HOMEBREW_CACHE + File.basename(@url)
@tarball_path = Pathname.new("#{HOMEBREW_CACHE}/#{File.basename(@url)}")
else
@tarball_path = HOMEBREW_CACHE + "#{name}-#{package.version}#{ext}"
@tarball_path = Pathname.new("#{HOMEBREW_CACHE}/#{name}-#{package.version}#{ext}")
end
@mirrors = package.mirrors
@temporary_path = Pathname("#@tarball_path.incomplete")
@temporary_path = Pathname.new("#@tarball_path.incomplete")
@local_bottle_path = nil
end
@ -213,7 +213,7 @@ class SubversionDownloadStrategy < AbstractDownloadStrategy
if name.to_s.empty? || name == '__UNKNOWN__'
raise NotImplementedError, "strategy requires a name parameter"
else
@co = HOMEBREW_CACHE + "#{name}--svn"
@co = Pathname.new("#{HOMEBREW_CACHE}/#{name}--svn")
end
@co += "-HEAD" if ARGV.build_head?
@ -316,7 +316,7 @@ class GitDownloadStrategy < AbstractDownloadStrategy
if name.to_s.empty? || name == '__UNKNOWN__'
raise NotImplementedError, "strategy requires a name parameter"
else
@clone = HOMEBREW_CACHE + "#{name}--git"
@clone = Pathname.new("#{HOMEBREW_CACHE}/#{name}--git")
end
end

View File

@ -116,16 +116,16 @@ class Formula
end
def linked_keg
HOMEBREW_REPOSITORY/'Library/LinkedKegs'/name
Pathname.new("#{HOMEBREW_LIBRARY}/LinkedKegs/#{name}")
end
def installed_prefix
devel_prefix = unless devel.nil?
HOMEBREW_CELLAR/name/devel.version
Pathname.new("#{HOMEBREW_CELLAR}/#{name}/#{devel.version}")
end
head_prefix = unless head.nil?
HOMEBREW_CELLAR/name/head.version
Pathname.new("#{HOMEBREW_CELLAR}/#{name}/#{head.version}")
end
if active_spec == head || head and head_prefix.directory?
@ -143,7 +143,7 @@ class Formula
end
def prefix
HOMEBREW_CELLAR+name+version
Pathname.new("#{HOMEBREW_CELLAR}/#{name}/#{version}")
end
def rack; prefix.parent end
@ -185,7 +185,9 @@ class Formula
# Defined and active build-time options.
def build; self.class.build; end
def opt_prefix; HOMEBREW_PREFIX/:opt/name end
def opt_prefix
Pathname.new("#{HOMEBREW_PREFIX}/opt/#{name}")
end
def download_strategy
active_spec.download_strategy
@ -350,13 +352,14 @@ class Formula
def self.canonical_name name
name = name.to_s if name.kind_of? Pathname
formula_with_that_name = HOMEBREW_REPOSITORY+"Library/Formula/#{name}.rb"
possible_alias = HOMEBREW_REPOSITORY+"Library/Aliases/#{name}"
possible_cached_formula = HOMEBREW_CACHE_FORMULA+"#{name}.rb"
formula_with_that_name = Pathname.new("#{HOMEBREW_REPOSITORY}/Library/Formula/#{name}.rb")
possible_alias = Pathname.new("#{HOMEBREW_REPOSITORY}/Library/Aliases/#{name}")
possible_cached_formula = Pathname.new("#{HOMEBREW_CACHE_FORMULA}/#{name}.rb")
if name.include? "/"
if name =~ %r{(.+)/(.+)/(.+)}
tapd = HOMEBREW_REPOSITORY/"Library/Taps"/"#$1-#$2".downcase
tap_name = "#$1-#$2".downcase
tapd = Pathname.new("#{HOMEBREW_REPOSITORY}/Library/Taps/#{tap_name}")
tapd.find_formula do |relative_pathname|
return "#{tapd}/#{relative_pathname}" if relative_pathname.stem.to_s == $3
end if tapd.directory?
@ -472,7 +475,7 @@ class Formula
end
def self.path name
HOMEBREW_REPOSITORY+"Library/Formula/#{name.downcase}.rb"
Pathname.new("#{HOMEBREW_REPOSITORY}/Library/Formula/#{name.downcase}.rb")
end
def deps; self.class.dependencies.deps; end

View File

@ -33,15 +33,15 @@ module MacOS::Xcode extend self
def prefix
@prefix ||= begin
path = Pathname.new(folder)
if path.absolute? and (path/'usr/bin/make').executable?
if path.absolute? and File.executable? "#{path}/usr/bin/make"
path
elsif File.executable? '/Developer/usr/bin/make'
# we do this to support cowboys who insist on installing
# only a subset of Xcode
Pathname.new '/Developer'
elsif (V4_BUNDLE_PATH/'Contents/Developer/usr/bin/make').executable?
Pathname.new('/Developer')
elsif File.executable? "#{V4_BUNDLE_PATH}/Contents/Developer/usr/bin/make"
# fallback for broken Xcode 4.3 installs
V4_BUNDLE_PATH/'Contents/Developer'
Pathname.new("#{V4_BUNDLE_PATH}/Contents/Developer")
else
# Ask Spotlight where Xcode is. If the user didn't install the
# helper tools and installed Xcode in a non-conventional place, this
@ -51,7 +51,7 @@ module MacOS::Xcode extend self
unless path.nil?
path += "Contents/Developer"
path if (path/'usr/bin/make').executable?
path if File.executable? "#{path}/usr/bin/make"
end
end
end
@ -76,7 +76,7 @@ module MacOS::Xcode extend self
# this shortcut makes version work for people who don't realise you
# need to install the CLI tools
xcode43build = prefix/'usr/bin/xcodebuild'
xcode43build = Pathname.new("#{prefix}/usr/bin/xcodebuild")
if xcode43build.file?
`#{xcode43build} -version 2>/dev/null` =~ /Xcode (\d(\.\d)*)/
return $1 if $1

View File

@ -70,27 +70,27 @@ module MacOS::X11 extend self
# Confusingly, executables (e.g. config scripts) are only found under
# /opt/X11/bin or /usr/X11/bin in all cases.
def bin
prefix/'bin'
Pathname.new("#{prefix}/bin")
end
def include
@include ||= if use_sdk?
MacOS.sdk_path/'usr/X11/include'
Pathname.new("#{MacOS.sdk_path}/usr/X11/include")
else
prefix/'include'
Pathname.new("#{prefix}/include")
end
end
def lib
@lib ||= if use_sdk?
MacOS.sdk_path/'usr/X11/lib'
Pathname.new("#{MacOS.sdk_path}/usr/X11/lib")
else
prefix/'lib'
Pathname.new("#{prefix}/lib")
end
end
def share
prefix/'share'
Pathname.new("#{prefix}/share")
end
private