summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndre Arko <andre@arko.net>2013-03-02 00:16:54 -0800
committerAndre Arko <andre@arko.net>2013-03-02 00:16:54 -0800
commitdc6f8b3e08ac17d4189e23d71764de679f3dc98e (patch)
treeea746ae558e1c5b38b406d552f18d9201fc21e10
parent617bed3c7bc89a3a5a7e3c604ce175ca522dfbbd (diff)
downloadbundler-dc6f8b3e08ac17d4189e23d71764de679f3dc98e.tar.gz
delay rubygems/security so we can catch LoadErrors
-rw-r--r--lib/bundler/cli.rb13
-rw-r--r--lib/bundler/rubygems_integration.rb13
2 files changed, 18 insertions, 8 deletions
diff --git a/lib/bundler/cli.rb b/lib/bundler/cli.rb
index be8eb51733..f906796dc5 100644
--- a/lib/bundler/cli.rb
+++ b/lib/bundler/cli.rb
@@ -1,7 +1,6 @@
+require 'bundler'
require 'bundler/similarity_detector'
require 'bundler/vendored_thor'
-require 'rubygems/user_interaction'
-require 'rubygems/security'
module Bundler
class CLI < Thor
@@ -170,8 +169,10 @@ module Bundler
"Use the rubygems modern index instead of the API endpoint"
method_option "clean", :type => :boolean, :banner =>
"Run bundle clean automatically after install"
- method_option "trust-policy", :alias => "P", :type => :string, :banner =>
- "Gem trust policy (like gem install -P). Must be one of " + Gem::Security::Policies.keys.join('|')
+ unless Bundler.rubygems.security_policies.empty?
+ method_option "trust-policy", :alias => "P", :type => :string, :banner =>
+ "Gem trust policy (like gem install -P). Must be one of " + Bundler.rubygems.security_policies.keys.join('|')
+ end
def install
opts = options.dup
@@ -193,9 +194,9 @@ module Bundler
end
if (opts["trust-policy"])
- unless (Gem::Security::Policies.keys.include?(opts["trust-policy"]))
+ unless (Bundler.rubygems.security_policies.keys.include?(opts["trust-policy"]))
Bundler.ui.error "Rubygems doesn't know about trust policy '#{opts["trust-policy"]}'. " \
- "The known policies are: #{Gem::Security::Policies.keys.join(', ')}."
+ "The known policies are: #{Bundler.rubygems.security_policies.keys.join(', ')}."
exit 1
end
Bundler.settings["trust-policy"] = opts["trust-policy"]
diff --git a/lib/bundler/rubygems_integration.rb b/lib/bundler/rubygems_integration.rb
index 69084a94e1..0ba5116466 100644
--- a/lib/bundler/rubygems_integration.rb
+++ b/lib/bundler/rubygems_integration.rb
@@ -166,6 +166,15 @@ module Bundler
Gem::RemoteFetcher.fetcher.download(spec, uri, path)
end
+ def security_policies
+ @security_policies ||= begin
+ require 'rubygems/security'
+ Gem::Security::Policies
+ rescue LoadError
+ {}
+ end
+ end
+
def reverse_rubygems_kernel_mixin
# Disable rubygems' gem activation system
::Kernel.class_eval do
@@ -424,8 +433,6 @@ module Bundler
# Rubygems 2.0
class Future < RubygemsIntegration
- require 'rubygems/package'
-
def stub_rubygems(specs)
Gem::Specification.all = specs
@@ -460,12 +467,14 @@ module Bundler
end
def gem_from_path(path, policy = nil)
+ require 'rubygems/package'
p = Gem::Package.new(path)
p.security_policy = policy if policy
return p
end
def build(spec)
+ require 'rubygems/package'
Gem::Package.build(spec)
end