aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/dev-cmd/mirror.rb
blob: bf19ee3c577c3dcfed1b5269ebdd4b870514d968 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#: @hide_from_man_page
#:  * `mirror` [`--test`] <formulae>:
#:    Reuploads the stable URL for a formula to Bintray to use it as a mirror.

module Homebrew
  module_function

  def mirror
    odie "This command requires at least formula argument!" if ARGV.named.empty?

    bintray_user = ENV["HOMEBREW_BINTRAY_USER"]
    bintray_key = ENV["HOMEBREW_BINTRAY_KEY"]
    if !bintray_user || !bintray_key
      raise "Missing HOMEBREW_BINTRAY_USER or HOMEBREW_BINTRAY_KEY variables!"
    end

    ARGV.formulae.each do |f|
      bintray_package = Utils::Bottles::Bintray.package f.name
      bintray_repo_url = "https://api.bintray.com/packages/homebrew/mirror"
      package_url = "#{bintray_repo_url}/#{bintray_package}"

      unless system "curl", "--silent", "--fail", "--output", "/dev/null", package_url
        package_blob = <<~EOS
          {"name": "#{bintray_package}",
           "public_download_numbers": true,
           "public_stats": true}
        EOS
        curl "--silent", "--fail", "--user", "#{bintray_user}:#{bintray_key}",
             "--header", "Content-Type: application/json",
             "--data", package_blob, bintray_repo_url
        puts
      end

      download = f.fetch
      f.verify_download_integrity(download)
      filename = download.basename
      destination_url = "https://dl.bintray.com/homebrew/mirror/#{filename}"

      ohai "Uploading to #{destination_url}"
      content_url = "https://api.bintray.com/content/homebrew/mirror"
      content_url += "/#{bintray_package}/#{f.pkg_version}/#{filename}"
      content_url += "?publish=1"
      curl "--silent", "--fail", "--user", "#{bintray_user}:#{bintray_key}",
           "--upload-file", download, content_url
      puts
      ohai "Mirrored #{filename}!"
    end
  end
end