diff options
Diffstat (limited to 'Library/Contributions/cmd/brew-mirror-check.rb')
| -rwxr-xr-x | Library/Contributions/cmd/brew-mirror-check.rb | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/Library/Contributions/cmd/brew-mirror-check.rb b/Library/Contributions/cmd/brew-mirror-check.rb new file mode 100755 index 000000000..821a62526 --- /dev/null +++ b/Library/Contributions/cmd/brew-mirror-check.rb @@ -0,0 +1,56 @@ +require 'formula' + +class Formula + def test_mirror mirror + # Checksum verification is done against @active_spec, so we need only + # populate the stub spec object with the mirror URL. + spec = SoftwareSpec.new(mirror) + downloader = download_strategy.new(name, spec) + + # Force the downloader to attempt the download by removing the tarball if + # it is allready cached. + tarball_path = downloader.tarball_path + tarball_path.unlink if tarball_path.exist? + + begin + fetched = downloader.fetch + rescue DownloadError => e + opoo "Failed to fetch from URL: #{url}" + return + end + + verify_download_integrity fetched if fetched.kind_of? Pathname + end +end + +module Homebrew extend self + def check_mirrors + mirror_check_usage = <<-EOS +Usage: brew mirror-check <formulae ...> + +Cycle through mirror lists for each formula, attempt a download and validate file hashes. + EOS + + if ARGV.empty? + puts mirror_check_usage + exit 0 + end + + formulae = ARGV.formulae + raise FormulaUnspecifiedError if formulae.empty? + + formulae.each do |f| + if f.mirrors.empty? + opoo "#{f.name} has no mirrors" + next + else + oh1 "Testing mirrors for #{f.name}" + f.mirrors.each{ |m| f.test_mirror m } + end + end + end +end + +# Here is the actual code that gets run when `brew` loads this external +# command. +Homebrew.check_mirrors |
