diff options
author | Andre Arko <andre@arko.net> | 2013-03-02 00:16:54 -0800 |
---|---|---|
committer | Andre Arko <andre@arko.net> | 2013-03-02 00:16:54 -0800 |
commit | dc6f8b3e08ac17d4189e23d71764de679f3dc98e (patch) | |
tree | ea746ae558e1c5b38b406d552f18d9201fc21e10 | |
parent | 617bed3c7bc89a3a5a7e3c604ce175ca522dfbbd (diff) | |
download | bundler-dc6f8b3e08ac17d4189e23d71764de679f3dc98e.tar.gz |
delay rubygems/security so we can catch LoadErrors
-rw-r--r-- | lib/bundler/cli.rb | 13 | ||||
-rw-r--r-- | lib/bundler/rubygems_integration.rb | 13 |
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 |