diff options
Diffstat (limited to 'Library/Homebrew/utils/bottles.rb')
| -rw-r--r-- | Library/Homebrew/utils/bottles.rb | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/Library/Homebrew/utils/bottles.rb b/Library/Homebrew/utils/bottles.rb new file mode 100644 index 000000000..6a05a7aeb --- /dev/null +++ b/Library/Homebrew/utils/bottles.rb @@ -0,0 +1,104 @@ +require "tab" +require "extend/ARGV" + +module Utils + class Bottles + class << self + def tag + @bottle_tag ||= "#{ENV["HOMEBREW_SYSTEM"]}-#{ENV["HOMEBREW_PROCESSOR"]}".downcase.to_sym + 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 + /(\.#{Regexp.escape(tag)}\.bottle\.(\d+\.)?tar\.gz)$/o + 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" |
