summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-25 07:30:41 +0000
committerdrbrain <drbrain@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2013-02-25 07:30:41 +0000
commite276482efc1c274ba9cfe17f5e6fbe02819a15bb ()
treebd7593e76ccb8374388f6ec5f8f6f639e696a7fb
parentbe26224be568166b5db530cd377bf71d78e985d8 (diff)
* lib/rubygems/config_file.rb: Lazily load .gem/credentials to only
check permissions when necessary. RubyGems bug #465 * test/rubygems/test_gem_config_file.rb: Test for the above. * test/rubygems/test_gem_commands_push_command.rb: Remove duplicated test. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39491 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog9
-rw-r--r--lib/rubygems/config_file.rb39
-rw-r--r--test/rubygems/test_gem_commands_push_command.rb43
-rw-r--r--test/rubygems/test_gem_config_file.rb15
4 files changed, 75 insertions, 31 deletions
@@ -1,3 +1,12 @@
Mon Feb 25 15:47:18 2013 Nobuyoshi Nakada <[email protected]>
* enc/depend (ARFLAGS): VisualC++ linker does not allow spaces between
@@ -127,16 +127,6 @@ class Gem::ConfigFile
attr_accessor :update_sources
##
- # API key for RubyGems.org
-
- attr_reader :rubygems_api_key
-
- ##
- # Hash of RubyGems.org and alternate API keys
-
- attr_reader :api_keys
-
- ##
# True if we want to force specification of gem server when pushing a gem
attr_accessor :disable_default_gem_server
@@ -221,13 +211,23 @@ class Gem::ConfigFile
@ssl_verify_mode = @hash[:ssl_verify_mode] if @hash.key? :ssl_verify_mode
@ssl_ca_cert = @hash[:ssl_ca_cert] if @hash.key? :ssl_ca_cert
- load_api_keys
Gem.sources = @hash[:sources] if @hash.key? :sources
handle_arguments arg_list
end
##
# Checks the permissions of the credentials file. If they are not 0600 an
# error message is displayed and RubyGems aborts.
@@ -273,11 +273,24 @@ if you believe they were disclosed to a third party.
end
if @api_keys.key? :rubygems_api_key then
- @rubygems_api_key = @api_keys[:rubygems_api_key]
- @api_keys[:rubygems] = @api_keys.delete :rubygems_api_key unless @api_keys.key? :rubygems
end
end
def rubygems_api_key= api_key
check_credentials_permissions
@@ -18,7 +18,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
"ed244fbf2b1a52e012da8616c512fa47f9aa5250"
@spec, @path = util_gem "freewill", "1.0.0"
- @host = Gem.host
@api_key = Gem.configuration.rubygems_api_key
@fetcher = Gem::FakeFetcher.new
@@ -61,6 +61,27 @@ class TestGemCommandsPushCommand < Gem::TestCase
assert_match @response, @ui.output
end
def test_sending_when_default_host_disabled
Gem.configuration.disable_default_gem_server = true
response = "You must specify a gem server"
@@ -110,29 +131,13 @@ class TestGemCommandsPushCommand < Gem::TestCase
send_battery
end
- def test_sending_gem_default
@response = "Successfully registered gem: freewill (1.0.0)"
@fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
send_battery
end
- def test_sending_gem_host
- @response = "Successfully registered gem: freewill (1.0.0)"
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
- @cmd.options['host'] = "#{Gem.host}"
-
- send_battery
- end
-
- def test_sending_gem_ENV
- @response = "Successfully registered gem: freewill (1.0.0)"
- @fetcher.data["#{@host}/api/v1/gems"] = [@response, 200, 'OK']
- ENV["RUBYGEMS_HOST"] = "#{Gem.host}"
-
- send_battery
- end
-
def test_raises_error_with_no_arguments
def @cmd.sign_in(*); end
assert_raises Gem::CommandLineError do
@@ -143,6 +148,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
def test_sending_gem_denied
response = "You don't have permission to push to this gem"
@fetcher.data["#{@host}/api/v1/gems"] = [response, 403, 'Forbidden']
assert_raises Gem::MockGemUi::TermError do
use_ui @ui do
@@ -162,6 +168,7 @@ class TestGemCommandsPushCommand < Gem::TestCase
Gem.configuration.load_api_keys
@cmd.handle_options %w(-k other)
@cmd.send_gem(@path)
assert_equal Gem.configuration.api_keys[:other],
@@ -164,6 +164,21 @@ class TestGemConfigFile < Gem::TestCase
assert_equal 2048, @cfg.bulk_threshold
end
def test_check_credentials_permissions
skip 'chmod not supported' if win_platform?