More effective use of incremental MD5 to eliminate loading entire tarball into memory
Signed-off-by: Adam Vandenberg <flangy@gmail.com>
This commit is contained in:
parent
6586f89a29
commit
9fbc26a39f
@ -52,7 +52,7 @@ def __make url, name
|
|||||||
if strategy == CurlDownloadStrategy
|
if strategy == CurlDownloadStrategy
|
||||||
d = strategy.new url, name, version, nil
|
d = strategy.new url, name, version, nil
|
||||||
the_tarball = d.fetch
|
the_tarball = d.fetch
|
||||||
md5 = Digest::MD5.hexdigest(the_tarball.read)
|
md5 = the_tarball.md5
|
||||||
puts "MD5 is #{md5}"
|
puts "MD5 is #{md5}"
|
||||||
else
|
else
|
||||||
puts "--cache requested, but we can only cache formulas that use Curl."
|
puts "--cache requested, but we can only cache formulas that use Curl."
|
||||||
|
|||||||
@ -157,7 +157,13 @@ class Pathname
|
|||||||
|
|
||||||
def md5
|
def md5
|
||||||
require 'digest'
|
require 'digest'
|
||||||
Digest::MD5.hexdigest(File.read(self))
|
incr_md5 = Digest::MD5.new
|
||||||
|
self.open('r') do |f|
|
||||||
|
f.each_line do |line|
|
||||||
|
incr_md5 << line
|
||||||
|
end
|
||||||
|
end
|
||||||
|
incr_md5.hexdigest
|
||||||
end
|
end
|
||||||
|
|
||||||
if '1.9' <= RUBY_VERSION
|
if '1.9' <= RUBY_VERSION
|
||||||
|
|||||||
@ -325,7 +325,14 @@ private
|
|||||||
type ||= :md5
|
type ||= :md5
|
||||||
supplied=instance_variable_get("@#{type}")
|
supplied=instance_variable_get("@#{type}")
|
||||||
type=type.to_s.upcase
|
type=type.to_s.upcase
|
||||||
hash=Digest.const_get(type).hexdigest(fn.read)
|
hasher = Digest.const_get(type)
|
||||||
|
|
||||||
|
# Most are MD5 and it should be efficient.
|
||||||
|
if hasher == Digest::MD5
|
||||||
|
hash = fn.md5
|
||||||
|
else
|
||||||
|
hash = hasher.hexdigest(fn.read)
|
||||||
|
end
|
||||||
|
|
||||||
if supplied and not supplied.empty?
|
if supplied and not supplied.empty?
|
||||||
raise "#{type} mismatch\nExpected: #{hash}\nArchive: #{fn}" unless supplied.upcase == hash.upcase
|
raise "#{type} mismatch\nExpected: #{hash}\nArchive: #{fn}" unless supplied.upcase == hash.upcase
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user