summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrohit <rohit.arondekar@gmail.com>2012-03-11 12:13:57 +0530
committerAndre Arko <andre@arko.net>2012-03-10 22:48:37 -0800
commitd49f78b141ef99107facb3bba6728e66783e2919 (patch)
treebc46de21f4030b8742611698d218e34baa4db8ec
parent66f42495854446316e5d23168905e8e9bf87e74b (diff)
downloadbundler-d49f78b141ef99107facb3bba6728e66783e2919.tar.gz
Fix URI exception by encoding gem names for rubygems dependency API #1672
-rw-r--r--lib/bundler/fetcher.rb3
-rw-r--r--spec/install/gems/dependency_api_spec.rb10
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/bundler/fetcher.rb b/lib/bundler/fetcher.rb
index 16954329ba..e4ed6e0bd3 100644
--- a/lib/bundler/fetcher.rb
+++ b/lib/bundler/fetcher.rb
@@ -158,7 +158,8 @@ module Bundler
# fetch from Gemcutter Dependency Endpoint API
def fetch_dependency_remote_specs(gem_names)
Bundler.ui.debug "Query Gemcutter Dependency Endpoint API: #{gem_names.join(' ')}"
- uri = URI.parse("#{@remote_uri}api/v1/dependencies?gems=#{gem_names.join(",")}")
+ encoded_gem_names = URI.encode(gem_names.join(","))
+ uri = URI.parse("#{@remote_uri}api/v1/dependencies?gems=#{encoded_gem_names}")
marshalled_deps = fetch(uri)
gem_list = Marshal.load(marshalled_deps)
deps_list = []
diff --git a/spec/install/gems/dependency_api_spec.rb b/spec/install/gems/dependency_api_spec.rb
index cc4be1301d..a9e4a9d257 100644
--- a/spec/install/gems/dependency_api_spec.rb
+++ b/spec/install/gems/dependency_api_spec.rb
@@ -14,6 +14,16 @@ describe "gemcutter's dependency API" do
should_be_installed "rack 1.0.0"
end
+ it "should URI encode gem names" do
+ gemfile <<-G
+ source "#{source_uri}"
+ gem " sinatra"
+ G
+
+ bundle :install, :artifice => "endpoint"
+ out.should include("Could not find gem ' sinatra")
+ end
+
it "should handle nested dependencies" do
gemfile <<-G
source "#{source_uri}"