diff options
| author | Jack Nagel | 2013-04-14 22:27:11 -0500 |
|---|---|---|
| committer | Jack Nagel | 2013-04-14 22:38:18 -0500 |
| commit | 4a0d57283e8b455579dbc02cfc25336c705e465d (patch) | |
| tree | 6d84bb18976fcb9c7c19803e445968b041024665 /Library | |
| parent | 05a456c231dc6da7cb0f7c70cb21feaf9a0d803c (diff) | |
| download | homebrew-4a0d57283e8b455579dbc02cfc25336c705e465d.tar.bz2 | |
Performance fix for Pathname#prepend_prefix
See 05a456c231dc6da7cb0f7c70cb21feaf9a0d803c; same story.
Diffstat (limited to 'Library')
| -rw-r--r-- | Library/Homebrew/extend/pathname.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/Library/Homebrew/extend/pathname.rb b/Library/Homebrew/extend/pathname.rb index 1f6d6695d..07526f0a2 100644 --- a/Library/Homebrew/extend/pathname.rb +++ b/Library/Homebrew/extend/pathname.rb @@ -386,6 +386,9 @@ class Pathname end end + # We redefine these private methods in order to add the /o modifier to + # the Regexp literals, which forces string interpolation to happen only + # once instead of each time the method is called. This is fixed in 1.9+. if RUBY_VERSION <= "1.8.7" alias_method :old_chop_basename, :chop_basename def chop_basename(path) @@ -397,6 +400,20 @@ class Pathname end end private :chop_basename + + alias_method :old_prepend_prefix, :prepend_prefix + def prepend_prefix(prefix, relpath) + if relpath.empty? + File.dirname(prefix) + elsif /#{SEPARATOR_PAT}/o =~ prefix + prefix = File.dirname(prefix) + prefix = File.join(prefix, "") if File.basename(prefix + 'a') != 'a' + prefix + relpath + else + prefix + relpath + end + end + private :prepend_prefix end end |
