aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/patches.rb
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/patches.rb')
-rw-r--r--Library/Homebrew/patches.rb143
1 files changed, 0 insertions, 143 deletions
diff --git a/Library/Homebrew/patches.rb b/Library/Homebrew/patches.rb
deleted file mode 100644
index ccd677e7d..000000000
--- a/Library/Homebrew/patches.rb
+++ /dev/null
@@ -1,143 +0,0 @@
-require 'stringio'
-
-class Patches
- include Enumerable
-
- # The patches defined in a formula and the DATA from that file
- def initialize patches
- @patches = []
- return if patches.nil?
- n = 0
- normalize_patches(patches).each do |patch_p, urls|
- # Wrap the urls list in an array if it isn't already;
- # DATA.each does each line, which doesn't work so great
- urls = [urls] unless urls.kind_of? Array
- urls.each do |url|
- @patches << Patch.new(patch_p, '%03d-homebrew.diff' % n, url)
- n += 1
- end
- end
- end
-
- def external_patches?
- not external_curl_args.empty?
- end
-
- def each(&blk)
- @patches.each(&blk)
- end
- def empty?
- @patches.empty?
- end
-
- def download!
- return unless external_patches?
-
- # downloading all at once is much more efficient, especially for FTP
- curl(*external_curl_args)
-
- external_patches.each{|p| p.stage!}
- end
-
- private
-
- def external_patches
- @patches.select{|p| p.external?}
- end
-
- # Collects the urls and output names of all external patches
- def external_curl_args
- external_patches.collect{|p| p.curl_args}.flatten
- end
-
- def normalize_patches patches
- if patches.kind_of? Hash
- patches
- else
- { :p1 => patches } # We assume -p1
- end
- end
-
-end
-
-class Patch
- # Used by formula to unpack after downloading
- attr_reader :compression
- attr_reader :compressed_filename
- # Used by audit
- attr_reader :url
-
- def initialize patch_p, filename, url
- @patch_p = patch_p
- @patch_filename = filename
- @compressed_filename = nil
- @compression = nil
- @url = nil
-
- if url.kind_of? IO or url.kind_of? StringIO
- # File-like objects. Most common when DATA is passed.
- write_data url
- elsif looks_like_url(url)
- @url = url # Save URL to mark this as an external patch
- else
- # it's a file on the local filesystem
- # use URL as the filename for patch
- @patch_filename = url
- end
- end
-
- # rename the downloaded file to take compression into account
- def stage!
- return unless external?
- detect_compression!
- case @compression
- when :gzip
- @compressed_filename = @patch_filename + '.gz'
- FileUtils.mv @patch_filename, @compressed_filename
- when :bzip2
- @compressed_filename = @patch_filename + '.bz2'
- FileUtils.mv @patch_filename, @compressed_filename
- end
- end
-
- def external?
- not @url.nil?
- end
-
- def patch_args
- ["-#{@patch_p}", '-i', @patch_filename]
- end
-
- def curl_args
- [@url, '-o', @patch_filename]
- end
-
- private
-
- # Detect compression type from the downloaded patch.
- def detect_compression!
- # If nil we have not tried to detect yet
- if @compression.nil?
- path = Pathname.new(@patch_filename)
- if path.exist?
- @compression = path.compression_type
- @compression ||= :none # If nil, convert to :none
- end
- end
- end
-
- # Write the given file object (DATA) out to a local file for patch
- def write_data f
- pn = Pathname.new @patch_filename
- pn.write(brew_var_substitution(f.read.to_s))
- end
-
- # Do any supported substitutions of HOMEBREW vars in a DATA patch
- def brew_var_substitution s
- s.gsub("HOMEBREW_PREFIX", HOMEBREW_PREFIX)
- end
-
- def looks_like_url str
- str =~ %r[^\w+\://]
- end
-end