aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew
diff options
context:
space:
mode:
authorJan Lehnardt2011-07-20 15:37:33 +0200
committerMax Howell2011-07-27 09:48:35 +0100
commitc576f4088cd14b5873674f59e4e90ad8cd0745e0 (patch)
treeb21f7a6dc98a333cc30b171502a32a5a62f305ba /Library/Homebrew
parente2b21b0b4a8827f3328b34afcc4f60526b0008d3 (diff)
downloadbrew-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.rb18
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