2013-08-06 19:52:58 -07:00
|
|
|
# A Resource describes a tarball that a formula needs in addition
|
|
|
|
# to the formula's own download.
|
|
|
|
class Resource
|
|
|
|
include FileUtils
|
|
|
|
|
|
|
|
# The mktmp mixin expects a name property
|
|
|
|
# This is the resource name
|
|
|
|
attr_reader :name
|
|
|
|
|
|
|
|
def initialize name, spec
|
|
|
|
@name = name
|
|
|
|
@spec = spec
|
|
|
|
end
|
|
|
|
|
|
|
|
# Formula name must be set after the DSL, as we have no access to the
|
|
|
|
# formula name before initialization of the formula
|
|
|
|
def set_owner owner
|
|
|
|
@owner = owner
|
|
|
|
@downloader = @spec.download_strategy.new("#{owner}--#{name}", @spec)
|
|
|
|
end
|
|
|
|
|
|
|
|
# Download the resource
|
|
|
|
# If a target is given, unpack there; else unpack to a temp folder
|
|
|
|
# If block is given, yield to that block
|
|
|
|
# A target or a block must be given, but not both
|
|
|
|
def stage(target=nil)
|
|
|
|
fetched = fetch
|
2013-09-16 10:58:47 +10:00
|
|
|
verify_download_integrity(fetched) if fetched.respond_to?(:file?) and fetched.file?
|
2013-08-06 19:52:58 -07:00
|
|
|
mktemp do
|
|
|
|
@downloader.stage
|
|
|
|
if block_given?
|
|
|
|
yield self
|
|
|
|
else
|
|
|
|
target.install Dir['*']
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
def cached_download
|
|
|
|
@downloader.cached_location
|
|
|
|
end
|
|
|
|
|
|
|
|
# For brew-fetch and others.
|
|
|
|
def fetch
|
|
|
|
# Ensure the cache exists
|
|
|
|
HOMEBREW_CACHE.mkpath
|
|
|
|
@downloader.fetch
|
|
|
|
cached_download
|
|
|
|
end
|
|
|
|
|
|
|
|
def verify_download_integrity fn
|
|
|
|
@spec.verify_download_integrity(fn)
|
|
|
|
end
|
|
|
|
end
|