2016-04-25 17:57:51 +01:00
|
|
|
require "tab"
|
|
|
|
require "extend/ARGV"
|
|
|
|
|
|
|
|
module Utils
|
|
|
|
class Bottles
|
|
|
|
class << self
|
|
|
|
def tag
|
2016-07-16 21:06:30 +01:00
|
|
|
@bottle_tag ||= "#{ENV["HOMEBREW_SYSTEM"]}_#{ENV["HOMEBREW_PROCESSOR"]}".downcase.to_sym
|
2016-04-25 17:57:51 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def built_as?(f)
|
|
|
|
return false unless f.installed?
|
|
|
|
tab = Tab.for_keg(f.installed_prefix)
|
|
|
|
tab.built_as_bottle
|
|
|
|
end
|
|
|
|
|
|
|
|
def file_outdated?(f, file)
|
|
|
|
filename = file.basename.to_s
|
|
|
|
return unless f.bottle && filename.match(Pathname::BOTTLE_EXTNAME_RX)
|
|
|
|
|
|
|
|
bottle_ext = filename[native_regex, 1]
|
|
|
|
bottle_url_ext = f.bottle.url[native_regex, 1]
|
|
|
|
|
|
|
|
bottle_ext && bottle_url_ext && bottle_ext != bottle_url_ext
|
|
|
|
end
|
|
|
|
|
|
|
|
def native_regex
|
2016-05-08 20:35:52 +02:00
|
|
|
/(\.#{Regexp.escape(tag.to_s)}\.bottle\.(\d+\.)?tar\.gz)$/o
|
2016-04-25 17:57:51 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
def receipt_path(bottle_file)
|
|
|
|
Utils.popen_read("/usr/bin/tar", "-tzf", bottle_file, "*/*/INSTALL_RECEIPT.json").chomp
|
|
|
|
end
|
|
|
|
|
|
|
|
def resolve_formula_names(bottle_file)
|
|
|
|
receipt_file_path = receipt_path bottle_file
|
|
|
|
receipt_file = Utils.popen_read("tar", "-xOzf", bottle_file, receipt_file_path)
|
|
|
|
name = receipt_file_path.split("/").first
|
|
|
|
tap = Tab.from_file_content(receipt_file, "#{bottle_file}/#{receipt_file_path}").tap
|
|
|
|
|
|
|
|
if tap.nil? || tap.core_tap?
|
|
|
|
full_name = name
|
|
|
|
else
|
|
|
|
full_name = "#{tap}/#{name}"
|
|
|
|
end
|
|
|
|
|
|
|
|
[name, full_name]
|
|
|
|
end
|
|
|
|
|
|
|
|
def resolve_version(bottle_file)
|
|
|
|
PkgVersion.parse receipt_path(bottle_file).split("/")[1]
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Bintray
|
|
|
|
def self.package(formula_name)
|
|
|
|
formula_name.to_s.tr("+", "x")
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.repository(tap = nil)
|
|
|
|
if tap.nil? || tap.core_tap?
|
|
|
|
"bottles"
|
|
|
|
else
|
|
|
|
"bottles-#{tap.repo}"
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
class Collector
|
|
|
|
def initialize
|
|
|
|
@checksums = {}
|
|
|
|
end
|
|
|
|
|
|
|
|
def fetch_checksum_for(tag)
|
|
|
|
tag = find_matching_tag(tag)
|
|
|
|
return self[tag], tag if tag
|
|
|
|
end
|
|
|
|
|
|
|
|
def keys
|
|
|
|
@checksums.keys
|
|
|
|
end
|
|
|
|
|
|
|
|
def [](key)
|
|
|
|
@checksums[key]
|
|
|
|
end
|
|
|
|
|
|
|
|
def []=(key, value)
|
|
|
|
@checksums[key] = value
|
|
|
|
end
|
|
|
|
|
|
|
|
def key?(key)
|
|
|
|
@checksums.key?(key)
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def find_matching_tag(tag)
|
|
|
|
tag if key?(tag)
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
require "extend/os/bottles"
|