diff options
| author | Jan Lehnardt | 2011-07-20 15:37:33 +0200 |
|---|---|---|
| committer | Max Howell | 2011-07-27 09:48:35 +0100 |
| commit | c576f4088cd14b5873674f59e4e90ad8cd0745e0 (patch) | |
| tree | b21f7a6dc98a333cc30b171502a32a5a62f305ba /Library/Homebrew | |
| parent | e2b21b0b4a8827f3328b34afcc4f60526b0008d3 (diff) | |
| download | brew-c576f4088cd14b5873674f59e4e90ad8cd0745e0.tar.bz2 | |
Detect Apache mirror system and parse out the closest mirror.
All Apache Formulae should be updated to use the closer.vgi script
to specify downloads rather than a random mirror that could be out
of date or compromised. Apache's closer.cgi does periodic health
checks.
The base URL for the mirror system is
http://www.apache.org/dyn/closer.cgi?path=#{filepath}
e.g.:
http://www.apache.org/dyn/closer.cgi?path=/couchdb/1.0.3/apache-couchdb-1.0.3.tar.gz
Note: The addition of the "Actually downloading..." message is sub-optimal
as the message should probably be emitted in _fetch() rather than fetch(),
but I didn't want to change the way Homebrew works today, so I'm leaving
this for mxcl & team to sort out or adopt :)
Diffstat (limited to 'Library/Homebrew')
| -rw-r--r-- | Library/Homebrew/download_strategy.rb | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/Library/Homebrew/download_strategy.rb b/Library/Homebrew/download_strategy.rb index 883ea6878..85acfd3d8 100644 --- a/Library/Homebrew/download_strategy.rb +++ b/Library/Homebrew/download_strategy.rb @@ -126,6 +126,23 @@ private end end +# Detect and download from Apache Mirror +class CurlApacheMirrorDownloadStrategy < CurlDownloadStrategy + def _fetch + # Fetch mirror list site + require 'open-uri' + mirror_list = open(@url).read() + + # Parse out suggested mirror + # Yep, this is ghetto, grep the first <strong></strong> element content + mirror_url = mirror_list[/<strong>([^<]+)/, 1] + + ohai "Actually downloading from mirror: #{mirror_url}" + # Start download from that mirror + curl mirror_url, '-o', @tarball_path + end +end + # Download via an HTTP POST. # Query parameters on the URL are converted into POST parameters class CurlPostDownloadStrategy < CurlDownloadStrategy @@ -514,6 +531,7 @@ def detect_download_strategy url when %r[^https?://(.+?\.)?googlecode\.com/svn] then SubversionDownloadStrategy when %r[^https?://(.+?\.)?sourceforge\.net/svnroot/] then SubversionDownloadStrategy when %r[^http://svn.apache.org/repos/] then SubversionDownloadStrategy + when %r[^http://www.apache.org/dyn/closer.cgi] then CurlApacheMirrorDownloadStrategy # Otherwise just try to download else CurlDownloadStrategy end |
