rubygems-update 1.3.5 → 1.3.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- data.tar.gz.sig +0 -0
- data/.autotest +8 -1
- data/ChangeLog +164 -0
- data/History.txt +52 -1
- data/Manifest.txt +8 -8
- data/README +3 -2
- data/Rakefile +49 -5
- data/bin/gem +2 -2
- data/bin/update_rubygems +9 -11
- data/cruise_config.rb +4 -3
- data/hide_lib_for_update/note.txt +5 -0
- data/lib/rbconfig/datadir.rb +10 -14
- data/lib/rubygems.rb +117 -140
- data/lib/rubygems/builder.rb +4 -2
- data/lib/rubygems/command.rb +51 -48
- data/lib/rubygems/command_manager.rb +2 -0
- data/lib/rubygems/commands/dependency_command.rb +10 -5
- data/lib/rubygems/commands/environment_command.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +6 -5
- data/lib/rubygems/commands/install_command.rb +1 -0
- data/lib/rubygems/commands/mirror_command.rb +8 -8
- data/lib/rubygems/commands/owner_command.rb +75 -0
- data/lib/rubygems/commands/pristine_command.rb +1 -1
- data/lib/rubygems/commands/push_command.rb +45 -0
- data/lib/rubygems/commands/query_command.rb +4 -1
- data/lib/rubygems/commands/rdoc_command.rb +24 -9
- data/lib/rubygems/commands/server_command.rb +6 -0
- data/lib/rubygems/commands/setup_command.rb +14 -4
- data/lib/rubygems/commands/unpack_command.rb +2 -2
- data/lib/rubygems/commands/update_command.rb +2 -2
- data/lib/rubygems/commands/which_command.rb +7 -9
- data/lib/rubygems/config_file.rb +100 -26
- data/lib/rubygems/defaults.rb +1 -1
- data/lib/rubygems/dependency.rb +133 -75
- data/lib/rubygems/dependency_installer.rb +28 -10
- data/lib/rubygems/dependency_list.rb +41 -12
- data/lib/rubygems/doc_manager.rb +7 -0
- data/lib/rubygems/format.rb +16 -20
- data/lib/rubygems/gem_openssl.rb +1 -1
- data/lib/rubygems/gem_path_searcher.rb +10 -12
- data/lib/rubygems/gemcutter_utilities.rb +49 -0
- data/lib/rubygems/indexer.rb +2 -2
- data/lib/rubygems/install_update_options.rb +1 -9
- data/lib/rubygems/installer.rb +35 -76
- data/lib/rubygems/local_remote_options.rb +1 -2
- data/lib/rubygems/package.rb +0 -1
- data/lib/rubygems/package/tar_input.rb +3 -1
- data/lib/rubygems/package_task.rb +16 -11
- data/lib/rubygems/remote_fetcher.rb +22 -8
- data/lib/rubygems/requirement.rb +78 -100
- data/lib/rubygems/server.rb +41 -10
- data/lib/rubygems/source_index.rb +5 -5
- data/lib/rubygems/spec_fetcher.rb +2 -2
- data/lib/rubygems/specification.rb +66 -16
- data/lib/rubygems/test_utilities.rb +33 -4
- data/lib/rubygems/uninstaller.rb +3 -3
- data/lib/rubygems/user_interaction.rb +45 -0
- data/lib/rubygems/validator.rb +6 -7
- data/lib/rubygems/version.rb +206 -149
- data/lib/rubygems/version_option.rb +16 -0
- data/test/fake_certlib/openssl.rb +1 -1
- data/test/functional.rb +0 -7
- data/test/gem_installer_test_case.rb +4 -4
- data/test/gem_package_tar_test_case.rb +1 -1
- data/test/gemutilities.rb +35 -31
- data/test/insure_session.rb +0 -8
- data/test/mockgemui.rb +0 -8
- data/test/simple_gem.rb +2 -8
- data/test/test_config.rb +3 -10
- data/test/test_gem.rb +9 -14
- data/test/test_gem_builder.rb +1 -7
- data/test/test_gem_command.rb +1 -8
- data/test/test_gem_command_manager.rb +1 -7
- data/test/test_gem_commands_build_command.rb +4 -4
- data/test/test_gem_commands_cert_command.rb +1 -2
- data/test/test_gem_commands_check_command.rb +1 -7
- data/test/test_gem_commands_contents_command.rb +1 -1
- data/test/test_gem_commands_dependency_command.rb +17 -31
- data/test/test_gem_commands_environment_command.rb +1 -1
- data/test/test_gem_commands_fetch_command.rb +14 -12
- data/test/test_gem_commands_generate_index_command.rb +1 -1
- data/test/test_gem_commands_install_command.rb +22 -20
- data/test/test_gem_commands_list_command.rb +1 -1
- data/test/test_gem_commands_lock_command.rb +1 -1
- data/test/test_gem_commands_mirror_command.rb +5 -5
- data/test/test_gem_commands_outdated_command.rb +3 -5
- data/test/test_gem_commands_owner_command.rb +105 -0
- data/test/test_gem_commands_pristine_command.rb +2 -2
- data/test/test_gem_commands_push_command.rb +61 -0
- data/test/test_gem_commands_query_command.rb +23 -56
- data/test/test_gem_commands_server_command.rb +1 -1
- data/test/test_gem_commands_sources_command.rb +1 -70
- data/test/test_gem_commands_specification_command.rb +3 -4
- data/test/test_gem_commands_stale_command.rb +1 -1
- data/test/test_gem_commands_uninstall_command.rb +3 -4
- data/test/test_gem_commands_unpack_command.rb +1 -1
- data/test/test_gem_commands_update_command.rb +13 -13
- data/test/test_gem_commands_which_command.rb +66 -0
- data/test/test_gem_config_file.rb +13 -7
- data/test/test_gem_dependency.rb +82 -134
- data/test/test_gem_dependency_installer.rb +55 -30
- data/test/test_gem_dependency_list.rb +28 -7
- data/test/test_gem_doc_manager.rb +1 -7
- data/test/test_gem_ext_configure_builder.rb +2 -2
- data/test/test_gem_ext_ext_conf_builder.rb +1 -1
- data/test/test_gem_ext_rake_builder.rb +1 -1
- data/test/test_gem_format.rb +14 -11
- data/test/test_gem_gem_path_searcher.rb +12 -1
- data/test/test_gem_gem_runner.rb +1 -1
- data/test/test_gem_gemcutter_utilities.rb +103 -0
- data/test/test_gem_indexer.rb +44 -51
- data/test/test_gem_install_update_options.rb +1 -7
- data/test/test_gem_installer.rb +22 -82
- data/test/test_gem_local_remote_options.rb +1 -1
- data/test/test_gem_package_tar_header.rb +1 -8
- data/test/test_gem_package_tar_input.rb +1 -8
- data/test/test_gem_package_tar_output.rb +1 -8
- data/test/test_gem_package_tar_reader.rb +1 -8
- data/test/test_gem_package_tar_reader_entry.rb +1 -8
- data/test/test_gem_package_tar_writer.rb +1 -8
- data/test/test_gem_package_task.rb +1 -25
- data/test/test_gem_platform.rb +4 -4
- data/test/test_gem_remote_fetcher.rb +31 -21
- data/test/test_gem_requirement.rb +210 -140
- data/test/test_gem_server.rb +36 -1
- data/test/test_gem_source_index.rb +7 -13
- data/test/test_gem_spec_fetcher.rb +17 -47
- data/test/test_gem_specification.rb +7 -20
- data/test/test_gem_stream_ui.rb +21 -1
- data/test/test_gem_uninstaller.rb +1 -2
- data/test/test_gem_validator.rb +2 -8
- data/test/test_gem_version.rb +110 -254
- data/test/test_gem_version_option.rb +1 -1
- data/test/test_kernel.rb +1 -7
- data/util/CL2notes +1 -1
- data/util/gem_prelude.rb.template +64 -41
- metadata +33 -71
- metadata.gz.sig +0 -0
- data/lib/rubygems/digest/digest_adapter.rb +0 -49
- data/lib/rubygems/digest/md5.rb +0 -23
- data/lib/rubygems/digest/sha1.rb +0 -22
- data/lib/rubygems/digest/sha2.rb +0 -22
- data/lib/rubygems/timer.rb +0 -28
- data/test/test_gem_digest.rb +0 -46
- data/test/test_gem_source_info_cache.rb +0 -447
- data/test/test_gem_source_info_cache_entry.rb +0 -78
@@ -45,7 +45,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
45
45
|
options[:all] = value
|
46
46
|
end
|
47
47
|
|
48
|
-
add_option( '--prerelease',
|
48
|
+
add_option( '--[no-]prerelease',
|
49
49
|
'Display prerelease versions') do |value, options|
|
50
50
|
options[:prerelease] = value
|
51
51
|
end
|
@@ -111,6 +111,9 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
111
111
|
begin
|
112
112
|
fetcher = Gem::SpecFetcher.fetcher
|
113
113
|
spec_tuples = fetcher.find_matching dep, all, false, prerelease
|
114
|
+
|
115
|
+
spec_tuples += fetcher.find_matching dep, false, false, true if
|
116
|
+
prerelease and all
|
114
117
|
rescue Gem::RemoteFetcher::FetchError => e
|
115
118
|
if prerelease then
|
116
119
|
raise Gem::OperationNotSupportedError,
|
@@ -8,7 +8,7 @@ class Gem::Commands::RdocCommand < Gem::Command
|
|
8
8
|
def initialize
|
9
9
|
super 'rdoc', 'Generates RDoc for pre-installed gems',
|
10
10
|
:version => Gem::Requirement.default,
|
11
|
-
:include_rdoc => true, :include_ri => true
|
11
|
+
:include_rdoc => true, :include_ri => true, :overwrite => false
|
12
12
|
|
13
13
|
add_option('--all',
|
14
14
|
'Generate RDoc/RI documentation for all',
|
@@ -17,15 +17,20 @@ class Gem::Commands::RdocCommand < Gem::Command
|
|
17
17
|
end
|
18
18
|
|
19
19
|
add_option('--[no-]rdoc',
|
20
|
-
'
|
20
|
+
'Generate RDoc HTML') do |value, options|
|
21
21
|
options[:include_rdoc] = value
|
22
22
|
end
|
23
23
|
|
24
24
|
add_option('--[no-]ri',
|
25
|
-
'
|
25
|
+
'Generate RI data') do |value, options|
|
26
26
|
options[:include_ri] = value
|
27
27
|
end
|
28
28
|
|
29
|
+
add_option('--[no-]overwrite',
|
30
|
+
'Overwrite installed documents') do |value, options|
|
31
|
+
options[:overwrite] = value
|
32
|
+
end
|
33
|
+
|
29
34
|
add_version_option
|
30
35
|
end
|
31
36
|
|
@@ -34,7 +39,14 @@ class Gem::Commands::RdocCommand < Gem::Command
|
|
34
39
|
end
|
35
40
|
|
36
41
|
def defaults_str # :nodoc:
|
37
|
-
"--version '#{Gem::Requirement.default}' --rdoc --ri"
|
42
|
+
"--version '#{Gem::Requirement.default}' --rdoc --ri --no-overwrite"
|
43
|
+
end
|
44
|
+
|
45
|
+
def description # :nodoc:
|
46
|
+
<<-DESC
|
47
|
+
The rdoc command builds RDoc and RI documentation for installed gems. Use
|
48
|
+
--overwrite to force rebuilding of documentation.
|
49
|
+
DESC
|
38
50
|
end
|
39
51
|
|
40
52
|
def usage # :nodoc:
|
@@ -53,24 +65,27 @@ class Gem::Commands::RdocCommand < Gem::Command
|
|
53
65
|
end
|
54
66
|
|
55
67
|
if specs.empty?
|
56
|
-
|
68
|
+
raise "Failed to find gem #{gem_name} to generate RDoc for #{options[:version]}"
|
57
69
|
end
|
58
70
|
|
59
71
|
if options[:include_ri]
|
60
|
-
specs.each do |spec|
|
61
|
-
Gem::DocManager.new(spec)
|
72
|
+
specs.sort.each do |spec|
|
73
|
+
doc = Gem::DocManager.new(spec)
|
74
|
+
doc.generate_ri if options[:overwrite] || !doc.ri_installed?
|
62
75
|
end
|
63
76
|
|
64
77
|
Gem::DocManager.update_ri_cache
|
65
78
|
end
|
66
79
|
|
67
80
|
if options[:include_rdoc]
|
68
|
-
specs.each do |spec|
|
69
|
-
Gem::DocManager.new(spec)
|
81
|
+
specs.sort.each do |spec|
|
82
|
+
doc = Gem::DocManager.new(spec)
|
83
|
+
doc.generate_rdoc if options[:overwrite] || !doc.rdoc_installed?
|
70
84
|
end
|
71
85
|
end
|
72
86
|
|
73
87
|
true
|
74
88
|
end
|
89
|
+
|
75
90
|
end
|
76
91
|
|
@@ -36,6 +36,12 @@ class Gem::Commands::ServerCommand < Gem::Command
|
|
36
36
|
add_option '--[no-]daemon', 'run as a daemon' do |daemon, options|
|
37
37
|
options[:daemon] = daemon
|
38
38
|
end
|
39
|
+
|
40
|
+
add_option '-b', '--bind=HOST,HOST',
|
41
|
+
'addresses to bind', Array do |address, options|
|
42
|
+
options[:addresses] ||= []
|
43
|
+
options[:addresses].push(*address)
|
44
|
+
end
|
39
45
|
end
|
40
46
|
|
41
47
|
def defaults_str # :nodoc:
|
@@ -2,7 +2,6 @@ require 'rubygems/command'
|
|
2
2
|
require 'fileutils'
|
3
3
|
require 'rbconfig'
|
4
4
|
require 'tmpdir'
|
5
|
-
require 'pathname'
|
6
5
|
|
7
6
|
##
|
8
7
|
# Installs RubyGems itself. This command is ordinarily only available from a
|
@@ -57,10 +56,10 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|
57
56
|
end
|
58
57
|
|
59
58
|
def check_ruby_version
|
60
|
-
required_version = Gem::
|
59
|
+
required_version = Gem::Requirement.new '>= 1.8.6'
|
61
60
|
|
62
|
-
unless Gem.ruby_version
|
63
|
-
alert_error "Ruby version
|
61
|
+
unless required_version.satisfied_by? Gem.ruby_version then
|
62
|
+
alert_error "Expected Ruby version #{required_version}, is #{Gem.ruby_version}"
|
64
63
|
terminate_interaction 1
|
65
64
|
end
|
66
65
|
end
|
@@ -117,6 +116,8 @@ By default, this RubyGems will install gem as:
|
|
117
116
|
|
118
117
|
say "RubyGems #{Gem::VERSION} installed"
|
119
118
|
|
119
|
+
uninstall_old_gemcutter
|
120
|
+
|
120
121
|
install_rdoc
|
121
122
|
|
122
123
|
say
|
@@ -359,5 +360,14 @@ abort "#{deprecation_message}"
|
|
359
360
|
r.document args
|
360
361
|
end
|
361
362
|
|
363
|
+
def uninstall_old_gemcutter
|
364
|
+
require 'rubygems/uninstaller'
|
365
|
+
|
366
|
+
ui = Gem::Uninstaller.new('gemcutter', :all => true, :ignore => true,
|
367
|
+
:version => '< 0.4')
|
368
|
+
ui.uninstall
|
369
|
+
rescue Gem::InstallError
|
370
|
+
end
|
371
|
+
|
362
372
|
end
|
363
373
|
|
@@ -41,7 +41,7 @@ class Gem::Commands::UnpackCommand < Gem::Command
|
|
41
41
|
path = get_path name, options[:version]
|
42
42
|
|
43
43
|
if path then
|
44
|
-
basename = File.basename(path
|
44
|
+
basename = File.basename(path, '.gem')
|
45
45
|
target_dir = File.expand_path File.join(options[:target], basename)
|
46
46
|
FileUtils.mkdir_p target_dir
|
47
47
|
Gem::Installer.new(path, :unpack => true).unpack target_dir
|
@@ -79,7 +79,7 @@ class Gem::Commands::UnpackCommand < Gem::Command
|
|
79
79
|
# We expect to find (basename).gem in the 'cache' directory.
|
80
80
|
# Furthermore, the name match must be exact (ignoring case).
|
81
81
|
if gemname =~ /^#{selected.name}$/i
|
82
|
-
filename = selected.
|
82
|
+
filename = selected.file_name
|
83
83
|
path = nil
|
84
84
|
|
85
85
|
Gem.path.find do |gem_dir|
|
@@ -28,8 +28,8 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|
28
28
|
end
|
29
29
|
|
30
30
|
add_local_remote_options
|
31
|
-
|
32
31
|
add_platform_option
|
32
|
+
add_prerelease_option "as update targets"
|
33
33
|
end
|
34
34
|
|
35
35
|
def arguments # :nodoc:
|
@@ -51,7 +51,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
|
|
51
51
|
say "Updating RubyGems"
|
52
52
|
|
53
53
|
unless options[:args].empty? then
|
54
|
-
|
54
|
+
raise "No gem names are allowed with the --system option"
|
55
55
|
end
|
56
56
|
|
57
57
|
rubygems_update = Gem::Specification.new
|
@@ -27,13 +27,11 @@ class Gem::Commands::WhichCommand < Gem::Command
|
|
27
27
|
"--no-gems-first --no-all"
|
28
28
|
end
|
29
29
|
|
30
|
-
def usage # :nodoc:
|
31
|
-
"#{program_name} FILE [FILE ...]"
|
32
|
-
end
|
33
|
-
|
34
30
|
def execute
|
35
31
|
searcher = Gem::GemPathSearcher.new
|
36
32
|
|
33
|
+
found = false
|
34
|
+
|
37
35
|
options[:args].each do |arg|
|
38
36
|
dirs = $LOAD_PATH
|
39
37
|
spec = searcher.find arg
|
@@ -44,19 +42,19 @@ class Gem::Commands::WhichCommand < Gem::Command
|
|
44
42
|
else
|
45
43
|
dirs = $LOAD_PATH + gem_paths(spec)
|
46
44
|
end
|
47
|
-
|
48
|
-
say "(checking gem #{spec.full_name} for #{arg})" if
|
49
|
-
Gem.configuration.verbose and $stdout.tty?
|
50
45
|
end
|
51
46
|
|
52
47
|
paths = find_paths arg, dirs
|
53
48
|
|
54
49
|
if paths.empty? then
|
55
|
-
|
50
|
+
alert_error "Can't find ruby library file or shared library #{arg}"
|
56
51
|
else
|
57
52
|
say paths
|
53
|
+
found = true
|
58
54
|
end
|
59
55
|
end
|
56
|
+
|
57
|
+
terminate_interaction 1 unless found
|
60
58
|
end
|
61
59
|
|
62
60
|
def find_paths(package_name, dirs)
|
@@ -80,7 +78,7 @@ class Gem::Commands::WhichCommand < Gem::Command
|
|
80
78
|
end
|
81
79
|
|
82
80
|
def usage # :nodoc:
|
83
|
-
"#{program_name} FILE [...]"
|
81
|
+
"#{program_name} FILE [FILE ...]"
|
84
82
|
end
|
85
83
|
|
86
84
|
end
|
data/lib/rubygems/config_file.rb
CHANGED
@@ -4,10 +4,26 @@
|
|
4
4
|
# See LICENSE.txt for permissions.
|
5
5
|
#++
|
6
6
|
|
7
|
-
|
8
|
-
|
9
|
-
#
|
10
|
-
#
|
7
|
+
##
|
8
|
+
# Gem::ConfigFile RubyGems options and gem command options from ~/.gemrc.
|
9
|
+
#
|
10
|
+
# ~/.gemrc is a YAML file that uses strings to match gem command arguments and
|
11
|
+
# symbols to match RubyGems options.
|
12
|
+
#
|
13
|
+
# Gem command arguments use a String key that matches the command name and
|
14
|
+
# allow you to specify default arguments:
|
15
|
+
#
|
16
|
+
# install: --no-rdoc --no-ri
|
17
|
+
# update: --no-rdoc --no-ri
|
18
|
+
#
|
19
|
+
# You can use <tt>gem:</tt> to set default arguments for all commands.
|
20
|
+
#
|
21
|
+
# RubyGems options use symbol keys. Valid options are:
|
22
|
+
#
|
23
|
+
# +:backtrace+:: See #backtrace
|
24
|
+
# +:benchmark+:: See #benchmark
|
25
|
+
# +:sources+:: Sets Gem::sources
|
26
|
+
# +:verbose+:: See #verbose
|
11
27
|
|
12
28
|
class Gem::ConfigFile
|
13
29
|
|
@@ -52,49 +68,74 @@ class Gem::ConfigFile
|
|
52
68
|
|
53
69
|
SYSTEM_WIDE_CONFIG_FILE = File.join system_config_path, 'gemrc'
|
54
70
|
|
71
|
+
##
|
55
72
|
# List of arguments supplied to the config file object.
|
73
|
+
|
56
74
|
attr_reader :args
|
57
75
|
|
58
|
-
|
76
|
+
##
|
77
|
+
# Where to look for gems (deprecated)
|
78
|
+
|
59
79
|
attr_accessor :path
|
60
80
|
|
81
|
+
##
|
82
|
+
# Where to install gems (deprecated)
|
83
|
+
|
61
84
|
attr_accessor :home
|
62
85
|
|
86
|
+
##
|
63
87
|
# True if we print backtraces on errors.
|
88
|
+
|
64
89
|
attr_writer :backtrace
|
65
90
|
|
91
|
+
##
|
66
92
|
# True if we are benchmarking this run.
|
93
|
+
|
67
94
|
attr_accessor :benchmark
|
68
95
|
|
69
|
-
|
70
|
-
#
|
96
|
+
##
|
97
|
+
# Bulk threshold value. If the number of missing gems are above this
|
98
|
+
# threshold value, then a bulk download technique is used. (deprecated)
|
99
|
+
|
71
100
|
attr_accessor :bulk_threshold
|
72
101
|
|
102
|
+
##
|
73
103
|
# Verbose level of output:
|
74
104
|
# * false -- No output
|
75
105
|
# * true -- Normal output
|
76
106
|
# * :loud -- Extra output
|
107
|
+
|
77
108
|
attr_accessor :verbose
|
78
109
|
|
110
|
+
##
|
79
111
|
# True if we want to update the SourceInfoCache every time, false otherwise
|
112
|
+
|
80
113
|
attr_accessor :update_sources
|
81
114
|
|
115
|
+
##
|
116
|
+
# API key for RubyGems.org
|
117
|
+
|
118
|
+
attr_reader :rubygems_api_key
|
119
|
+
|
120
|
+
##
|
82
121
|
# Create the config file object. +args+ is the list of arguments
|
83
122
|
# from the command line.
|
84
123
|
#
|
85
124
|
# The following command line options are handled early here rather
|
86
125
|
# than later at the time most command options are processed.
|
87
126
|
#
|
88
|
-
#
|
89
|
-
# to be handled by the ConfigFile object to ensure we
|
90
|
-
# right config file.
|
91
|
-
#
|
92
|
-
# * --backtrace -- Backtrace needs to be turned on early so that
|
93
|
-
# errors before normal option parsing can be properly handled.
|
127
|
+
# <tt>--config-file</tt>, <tt>--config-file==NAME</tt>::
|
128
|
+
# Obviously these need to be handled by the ConfigFile object to ensure we
|
129
|
+
# get the right config file.
|
94
130
|
#
|
95
|
-
#
|
96
|
-
#
|
131
|
+
# <tt>--backtrace</tt>::
|
132
|
+
# Backtrace needs to be turned on early so that errors before normal
|
133
|
+
# option parsing can be properly handled.
|
97
134
|
#
|
135
|
+
# <tt>--debug</tt>::
|
136
|
+
# Enable Ruby level debug messages. Handled early for the same reason as
|
137
|
+
# --backtrace.
|
138
|
+
|
98
139
|
def initialize(arg_list)
|
99
140
|
@config_file_name = nil
|
100
141
|
need_config_file_name = false
|
@@ -131,21 +172,53 @@ class Gem::ConfigFile
|
|
131
172
|
@hash = @hash.merge user_config
|
132
173
|
|
133
174
|
# HACK these override command-line args, which is bad
|
134
|
-
@backtrace
|
135
|
-
@benchmark
|
136
|
-
@bulk_threshold
|
137
|
-
|
138
|
-
@
|
139
|
-
@update_sources
|
140
|
-
@
|
141
|
-
|
175
|
+
@backtrace = @hash[:backtrace] if @hash.key? :backtrace
|
176
|
+
@benchmark = @hash[:benchmark] if @hash.key? :benchmark
|
177
|
+
@bulk_threshold = @hash[:bulk_threshold] if @hash.key? :bulk_threshold
|
178
|
+
@home = @hash[:gemhome] if @hash.key? :gemhome
|
179
|
+
@path = @hash[:gempath] if @hash.key? :gempath
|
180
|
+
@update_sources = @hash[:update_sources] if @hash.key? :update_sources
|
181
|
+
@verbose = @hash[:verbose] if @hash.key? :verbose
|
182
|
+
|
183
|
+
load_rubygems_api_key
|
142
184
|
|
185
|
+
Gem.sources = @hash[:sources] if @hash.key? :sources
|
143
186
|
handle_arguments arg_list
|
144
187
|
end
|
145
188
|
|
189
|
+
##
|
190
|
+
# Location of RubyGems.org credentials
|
191
|
+
|
192
|
+
def credentials_path
|
193
|
+
File.join(Gem.user_home, '.gem', 'credentials')
|
194
|
+
end
|
195
|
+
|
196
|
+
def load_rubygems_api_key
|
197
|
+
api_key_hash = File.exists?(credentials_path) ? load_file(credentials_path) : @hash
|
198
|
+
|
199
|
+
@rubygems_api_key = api_key_hash[:rubygems_api_key] if api_key_hash.key? :rubygems_api_key
|
200
|
+
end
|
201
|
+
|
202
|
+
def rubygems_api_key=(api_key)
|
203
|
+
config = load_file(credentials_path).merge(:rubygems_api_key => api_key)
|
204
|
+
|
205
|
+
dirname = File.dirname(credentials_path)
|
206
|
+
Dir.mkdir(dirname) unless File.exists?(dirname)
|
207
|
+
|
208
|
+
require 'yaml'
|
209
|
+
|
210
|
+
File.open(credentials_path, 'w') do |f|
|
211
|
+
f.write config.to_yaml
|
212
|
+
end
|
213
|
+
|
214
|
+
@rubygems_api_key = api_key
|
215
|
+
end
|
216
|
+
|
146
217
|
def load_file(filename)
|
218
|
+
return {} unless filename and File.exists?(filename)
|
147
219
|
begin
|
148
|
-
|
220
|
+
require 'yaml'
|
221
|
+
YAML.load(File.read(filename))
|
149
222
|
rescue ArgumentError
|
150
223
|
warn "Failed to load #{config_file_name}"
|
151
224
|
rescue Errno::EACCES
|
@@ -239,8 +312,9 @@ class Gem::ConfigFile
|
|
239
312
|
|
240
313
|
# Writes out this config file, replacing its source.
|
241
314
|
def write
|
242
|
-
|
243
|
-
|
315
|
+
require 'yaml'
|
316
|
+
open config_file_name, 'w' do |io|
|
317
|
+
io.write to_yaml
|
244
318
|
end
|
245
319
|
end
|
246
320
|
|
data/lib/rubygems/defaults.rb
CHANGED
data/lib/rubygems/dependency.rb
CHANGED
@@ -1,14 +1,22 @@
|
|
1
|
-
|
2
|
-
# Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
|
3
|
-
# All rights reserved.
|
4
|
-
# See LICENSE.txt for permissions.
|
5
|
-
#++
|
1
|
+
require "rubygems/requirement"
|
6
2
|
|
7
3
|
##
|
8
|
-
# The Dependency class holds a Gem name and a Gem::Requirement
|
4
|
+
# The Dependency class holds a Gem name and a Gem::Requirement.
|
9
5
|
|
10
6
|
class Gem::Dependency
|
11
7
|
|
8
|
+
# :stopdoc:
|
9
|
+
@warned_version_requirement = false
|
10
|
+
|
11
|
+
def self.warned_version_requirement
|
12
|
+
@warned_version_requirement
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.warned_version_requirement= value
|
16
|
+
@warned_version_requirement = value
|
17
|
+
end
|
18
|
+
# :startdoc:
|
19
|
+
|
12
20
|
##
|
13
21
|
# Valid dependency types.
|
14
22
|
#--
|
@@ -16,9 +24,9 @@ class Gem::Dependency
|
|
16
24
|
# Gem::Specification::CURRENT_SPECIFICATION_VERSION as well.
|
17
25
|
|
18
26
|
TYPES = [
|
19
|
-
|
20
|
-
|
21
|
-
|
27
|
+
:development,
|
28
|
+
:runtime,
|
29
|
+
]
|
22
30
|
|
23
31
|
##
|
24
32
|
# Dependency name or regular expression.
|
@@ -26,122 +34,172 @@ class Gem::Dependency
|
|
26
34
|
attr_accessor :name
|
27
35
|
|
28
36
|
##
|
29
|
-
#
|
37
|
+
# Allows you to force this dependency to be a prerelease.
|
30
38
|
|
31
|
-
|
39
|
+
attr_writer :prerelease
|
32
40
|
|
33
41
|
##
|
34
|
-
#
|
35
|
-
|
36
|
-
attr_writer :version_requirements
|
37
|
-
|
38
|
-
##
|
39
|
-
# Orders dependencies by name only.
|
42
|
+
# Dependency type.
|
40
43
|
|
41
|
-
|
42
|
-
[@name] <=> [other.name]
|
43
|
-
end
|
44
|
+
attr_reader :type
|
44
45
|
|
45
46
|
##
|
46
|
-
# Constructs a dependency with +name+ and +requirements+.
|
47
|
+
# Constructs a dependency with +name+ and +requirements+. The last
|
48
|
+
# argument can optionally be the dependency type, which defaults to
|
49
|
+
# <tt>:runtime</tt>.
|
47
50
|
|
48
|
-
def initialize
|
49
|
-
|
51
|
+
def initialize name, *requirements
|
52
|
+
type = Symbol === requirements.last ? requirements.pop : :runtime
|
53
|
+
requirements = requirements.first if 1 == requirements.length # unpack
|
50
54
|
|
51
55
|
unless TYPES.include? type
|
52
|
-
raise ArgumentError, "Valid types are #{TYPES.inspect},
|
56
|
+
raise ArgumentError, "Valid types are #{TYPES.inspect}, "
|
57
|
+
+ "not #{@type.inspect}"
|
53
58
|
end
|
54
59
|
|
55
|
-
@
|
60
|
+
@name = name
|
61
|
+
@requirement = Gem::Requirement.create requirements
|
62
|
+
@type = type
|
63
|
+
@prerelease = false
|
56
64
|
|
57
|
-
|
58
|
-
|
59
|
-
end
|
65
|
+
# This is for Marshal backwards compatability. See the comments in
|
66
|
+
# +requirement+ for the dirty details.
|
60
67
|
|
61
|
-
|
62
|
-
normalize if defined? @version_requirement and @version_requirement
|
63
|
-
@version_requirements
|
68
|
+
@version_requirements = @requirement
|
64
69
|
end
|
65
70
|
|
66
|
-
|
67
|
-
|
68
|
-
end
|
71
|
+
##
|
72
|
+
# What does this dependency require?
|
69
73
|
|
70
|
-
|
74
|
+
##
|
75
|
+
# A dependency's hash is the XOR of the hashes of +name+, +type+,
|
76
|
+
# and +requirement+.
|
71
77
|
|
72
|
-
def
|
73
|
-
|
74
|
-
@version_requirements = Gem::Requirement.new([ver])
|
75
|
-
@version_requirement = nil
|
78
|
+
def hash # :nodoc:
|
79
|
+
name.hash ^ type.hash ^ requirement.hash
|
76
80
|
end
|
77
81
|
|
78
|
-
def
|
79
|
-
"
|
82
|
+
def inspect # :nodoc:
|
83
|
+
"<%s type=%p name=%p requirements=%p>" %
|
84
|
+
[self.class, @type, @name, requirement.to_s]
|
85
|
+
end
|
86
|
+
|
87
|
+
##
|
88
|
+
# Does this dependency require a prerelease?
|
89
|
+
|
90
|
+
def prerelease?
|
91
|
+
@prerelease || requirement.prerelease?
|
80
92
|
end
|
81
93
|
|
82
94
|
def pretty_print(q) # :nodoc:
|
83
95
|
q.group 1, 'Gem::Dependency.new(', ')' do
|
84
|
-
q.pp
|
96
|
+
q.pp name
|
85
97
|
q.text ','
|
86
98
|
q.breakable
|
87
99
|
|
88
|
-
q.pp
|
100
|
+
q.pp requirement
|
89
101
|
|
90
102
|
q.text ','
|
91
103
|
q.breakable
|
92
104
|
|
93
|
-
q.pp
|
105
|
+
q.pp type
|
94
106
|
end
|
95
107
|
end
|
96
108
|
|
97
|
-
def
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
109
|
+
def requirement
|
110
|
+
return @requirement if defined?(@requirement) and @requirement
|
111
|
+
|
112
|
+
# @version_requirements and @version_requirement are legacy ivar
|
113
|
+
# names, and supported here because older gems need to keep
|
114
|
+
# working and Dependency doesn't implement marshal_dump and
|
115
|
+
# marshal_load. In a happier world, this would be an
|
116
|
+
# attr_accessor. The horrifying instance_variable_get you see
|
117
|
+
# below is also the legacy of some old restructurings.
|
118
|
+
#
|
119
|
+
# Note also that because of backwards compatibility (loading new
|
120
|
+
# gems in an old RubyGems installation), we can't add explicit
|
121
|
+
# marshaling to this class until we want to make a big
|
122
|
+
# break. Maybe 2.0.
|
123
|
+
#
|
124
|
+
# Children, define explicit marshal and unmarshal behavior for
|
125
|
+
# public classes. Marshal formats are part of your public API.
|
126
|
+
|
127
|
+
if defined?(@version_requirement) && @version_requirement
|
128
|
+
version = @version_requirement.instance_variable_get :@version
|
129
|
+
@version_requirement = nil
|
130
|
+
@version_requirements = Gem::Requirement.new version
|
131
|
+
end
|
132
|
+
|
133
|
+
@requirement = @version_requirements if defined?(@version_requirements)
|
102
134
|
end
|
103
135
|
|
104
136
|
##
|
105
|
-
#
|
106
|
-
#
|
107
|
-
# equal version requirement that satisfies this dependency.
|
137
|
+
# Rails subclasses Gem::Dependency and uses this method, so we'll hack
|
138
|
+
# around it.
|
108
139
|
|
109
|
-
|
110
|
-
other = if self.class === other then
|
111
|
-
other
|
112
|
-
else
|
113
|
-
return false unless other.respond_to? :name and
|
114
|
-
other.respond_to? :version
|
140
|
+
alias __requirement requirement # :nodoc:
|
115
141
|
|
116
|
-
|
117
|
-
|
142
|
+
def requirements_list
|
143
|
+
requirement.as_list
|
144
|
+
end
|
118
145
|
|
119
|
-
|
120
|
-
|
146
|
+
def to_s # :nodoc:
|
147
|
+
"#{name} (#{requirement}, #{type})"
|
148
|
+
end
|
121
149
|
|
122
|
-
|
150
|
+
def version_requirements # :nodoc:
|
151
|
+
unless Gem::Dependency.warned_version_requirement then
|
152
|
+
warn "#{Gem.location_of_caller.join ':'}:Warning: " \
|
153
|
+
"Gem::Dependency#version_requirements is deprecated " \
|
154
|
+
"and will be removed on or after August 2010. " \
|
155
|
+
"Use #requirement"
|
123
156
|
|
124
|
-
|
157
|
+
Gem::Dependency.warned_version_requirement = true
|
158
|
+
end
|
125
159
|
|
126
|
-
|
127
|
-
|
160
|
+
__requirement
|
161
|
+
end
|
128
162
|
|
129
|
-
|
163
|
+
alias_method :version_requirement, :version_requirements
|
130
164
|
|
131
|
-
|
165
|
+
def == other # :nodoc:
|
166
|
+
Gem::Dependency === other &&
|
167
|
+
self.name == other.name &&
|
168
|
+
self.type == other.type &&
|
169
|
+
self.requirement == other.requirement
|
132
170
|
end
|
133
171
|
|
134
172
|
##
|
135
|
-
#
|
136
|
-
# #version_requirements
|
173
|
+
# Dependencies are ordered by name.
|
137
174
|
|
138
|
-
def
|
139
|
-
name
|
175
|
+
def <=> other
|
176
|
+
[@name] <=> [other.name]
|
140
177
|
end
|
141
178
|
|
142
|
-
|
143
|
-
|
144
|
-
|
179
|
+
##
|
180
|
+
# Uses this dependency as a pattern to compare to +other+. This
|
181
|
+
# dependency will match if the name matches the other's name, and
|
182
|
+
# other has only an equal version requirement that satisfies this
|
183
|
+
# dependency.
|
184
|
+
|
185
|
+
def =~ other
|
186
|
+
unless Gem::Dependency === other
|
187
|
+
other = Gem::Dependency.new other.name, other.version rescue return false
|
188
|
+
end
|
189
|
+
|
190
|
+
pattern = name
|
191
|
+
pattern = /\A#{Regexp.escape pattern}\Z/ unless Regexp === pattern
|
192
|
+
|
193
|
+
return false unless pattern =~ other.name
|
194
|
+
|
195
|
+
reqs = other.requirement.requirements
|
196
|
+
|
197
|
+
return false unless reqs.length == 1
|
198
|
+
return false unless reqs.first.first == '='
|
199
|
+
|
200
|
+
version = reqs.first.last
|
201
|
+
|
202
|
+
requirement.satisfied_by? version
|
145
203
|
end
|
146
204
|
|
147
205
|
end
|