diff options
author | Pablo Carranza <pcarranza@gmail.com> | 2015-12-08 22:44:47 +0000 |
---|---|---|
committer | Pablo Carranza <pcarranza@gmail.com> | 2015-12-27 22:19:55 +0100 |
commit | 206639df28fe4768dd41e0c572c10867aa1ce23e (patch) | |
tree | aa2d3a0b9c6f3f9abd5882e512a7ff69a9d024d1 /lib/bundler | |
parent | ecf26eaa1010906b766b87712ba585574b455dfa (diff) | |
download | bundler-206639df28fe4768dd41e0c572c10867aa1ce23e.tar.gz |
WIP - Setting up mirror probe with fallback
Diffstat (limited to 'lib/bundler')
-rw-r--r-- | lib/bundler/mirror.rb | 38 |
1 files changed, 31 insertions, 7 deletions
diff --git a/lib/bundler/mirror.rb b/lib/bundler/mirror.rb index dda6022e78..9824629635 100644 --- a/lib/bundler/mirror.rb +++ b/lib/bundler/mirror.rb @@ -1,7 +1,8 @@ module Bundler class Settings class Mirrors - def initialize + def initialize(prober = nil) + @prober = prober || TCPProbe.new @all = Mirror.new @mirrors = Hash.new { |h, k| h[k] = Mirror.new } end @@ -10,6 +11,15 @@ module Bundler @mirrors[URI(key.to_s)] end + def for(uri) + return @all.uri if @all.valid? + uri = AbsoluteURI.normalize(uri) + return uri unless @mirrors[uri] + mirror = @mirrors[uri] + @prober.probe(mirror) + mirror.uri + end + def fetch(key, &block) @mirrors.fetch(key, &block) end @@ -42,7 +52,11 @@ module Bundler end def uri=(uri) - @uri = URI(uri.to_s) + @uri = if uri.nil? + uri = nil + else + URI(uri.to_s) + end end def fallback_timeout=(timeout) @@ -65,16 +79,26 @@ module Bundler end end + class TCPProbe + def probe(uri) + end + end + private class MirrorConfig - attr_reader :uri, :value + attr_accessor :uri, :value + def initialize(config_line, value) - all, uri, fallback = - config_line.match(/^mirror(\.all)?\.(.+?)(\.fallback_timeout)?\/?$/).captures - @all = !all.nil? + uri, fallback = + config_line.match(/^mirror\.(all|.+?)(\.fallback_timeout)?\/?$/).captures @fallback = !fallback.nil? - @uri = AbsoluteURI.normalize(uri) + @all = false + if uri == "all" + @all = true + else + @uri = AbsoluteURI.normalize(uri) + end @value = value end |