diff --git a/Library/Contributions/examples/brew-mirror-check.rb b/Library/Contributions/examples/brew-mirror-check.rb new file mode 100755 index 0000000000..1ae06ce6aa --- /dev/null +++ b/Library/Contributions/examples/brew-mirror-check.rb @@ -0,0 +1,55 @@ +require 'formula' + +class Formula + def test_mirror mirror + url, specs = mirror.values_at :url, :specs + downloader = download_strategy.new url, name, version, specs + + # 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 + +Cycle through mirror lists for each formula, attempt a download and validate +MD5 sums. + 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