aboutsummaryrefslogtreecommitdiffstats
path: root/Library
diff options
context:
space:
mode:
authorAdam Vandenberg2012-03-09 10:56:45 -0800
committerAdam Vandenberg2012-03-19 18:50:17 -0700
commit7c5002082273d57f8f4a386aee5da2383283974a (patch)
tree81417ab1471a3c756484f5833f56dbad23126334 /Library
parentf6052e8cc44e885f4a8b31d77d1c579169779ac6 (diff)
downloadbrew-7c5002082273d57f8f4a386aee5da2383283974a.tar.bz2
Use Patches
Diffstat (limited to 'Library')
-rw-r--r--Library/Homebrew/formula.rb66
1 files changed, 9 insertions, 57 deletions
diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb
index 4cc3dcdd7..909bbd0f9 100644
--- a/Library/Homebrew/formula.rb
+++ b/Library/Homebrew/formula.rb
@@ -4,7 +4,7 @@ require 'formula_support'
require 'hardware'
require 'bottles'
require 'extend/fileutils'
-
+require 'patches'
# Derive and define at least @url, see Library/Formula for examples
class Formula
@@ -521,71 +521,23 @@ private
end
def patch
- # Only call `patches` once.
- # If there is code in `patches`, which is not recommended, we only
- # want to run that code once.
- the_patches = patches
- return if the_patches.nil?
-
- if not the_patches.kind_of? Hash
- # We assume -p1
- patch_defns = { :p1 => the_patches }
- else
- patch_defns = the_patches
- end
-
- patch_list=[]
- n=0
- patch_defns.each do |arg, urls|
- # DATA.each does each line, which doesn't work so great
- urls = [urls] unless urls.kind_of? Array
-
- urls.each do |url|
- p = {:filename => '%03d-homebrew.diff' % n+=1, :compression => false}
-
- if defined? DATA and url == DATA
- pn = Pathname.new p[:filename]
- pn.write(DATA.read.to_s.gsub("HOMEBREW_PREFIX", HOMEBREW_PREFIX))
- elsif url =~ %r[^\w+\://]
- out_fn = p[:filename]
- case url
- when /\.gz$/
- p[:compression] = :gzip
- out_fn += '.gz'
- when /\.bz2$/
- p[:compression] = :bzip2
- out_fn += '.bz2'
- end
- p[:curl_args] = [url, '-o', out_fn]
- else
- # it's a file on the local filesystem
- p[:filename] = url
- end
-
- p[:args] = ["-#{arg}", '-i', p[:filename]]
-
- patch_list << p
- end
- end
-
+ patch_list = Patches.new(patches)
return if patch_list.empty?
- external_patches = patch_list.collect{|p| p[:curl_args]}.select{|p| p}.flatten
- unless external_patches.empty?
+ unless patch_list.external_curl_args.empty?
ohai "Downloading patches"
# downloading all at once is much more efficient, especially for FTP
- curl(*external_patches)
+ curl(*patch_list.external_curl_args)
end
ohai "Patching"
patch_list.each do |p|
- case p[:compression]
- when :gzip then safe_system "/usr/bin/gunzip", p[:filename]+'.gz'
- when :bzip2 then safe_system "/usr/bin/bunzip2", p[:filename]+'.bz2'
+ case p.compression
+ when :gzip then safe_system "/usr/bin/gunzip", p.download_filename
+ when :bzip2 then safe_system "/usr/bin/bunzip2", p.download_filename
end
- # -f means it doesn't prompt the user if there are errors, if just
- # exits with non-zero status
- safe_system '/usr/bin/patch', '-f', *(p[:args])
+ # -f means don't prompt the user if there are errors; just exit with non-zero status
+ safe_system '/usr/bin/patch', '-f', *(p.patch_args)
end
end