From 49682e854d10e99e799e7aeefd1ec08e2ebcf56b Mon Sep 17 00:00:00 2001 From: Jack Nagel Date: Mon, 15 Apr 2013 15:00:57 -0500 Subject: [PATCH] Avoid expensive Pathname concatenation --- Library/Homebrew/download_strategy.rb | 10 +++++----- Library/Homebrew/formula.rb | 23 +++++++++++++---------- Library/Homebrew/os/mac/xcode.rb | 12 ++++++------ Library/Homebrew/os/mac/xquartz.rb | 12 ++++++------ 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 013cc4ab28..9d6ebb9312 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -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 diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 8217f30c9b..62ec065ac9 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -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 diff --git a/Library/Homebrew/os/mac/xcode.rb b/Library/Homebrew/os/mac/xcode.rb index a89faa0023..59bc199b26 100644 --- a/Library/Homebrew/os/mac/xcode.rb +++ b/Library/Homebrew/os/mac/xcode.rb @@ -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 diff --git a/Library/Homebrew/os/mac/xquartz.rb b/Library/Homebrew/os/mac/xquartz.rb index a515d8915e..f5b85afd23 100644 --- a/Library/Homebrew/os/mac/xquartz.rb +++ b/Library/Homebrew/os/mac/xquartz.rb @@ -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