rubygems-update 1.8.30 → 2.0.0.preview2
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- checksums.yaml +6 -6
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +3 -0
- data/.autotest +6 -3
- data/History.txt +137 -63
- data/LICENSE.txt +1 -5
- data/Manifest.txt +69 -32
- data/README.rdoc +11 -9
- data/Rakefile +24 -38
- data/bin/gem +0 -9
- data/bin/update_rubygems +1 -0
- data/lib/rubygems.rb +193 -405
- data/lib/rubygems/available_set.rb +95 -0
- data/lib/rubygems/command.rb +88 -45
- data/lib/rubygems/command_manager.rb +67 -40
- data/lib/rubygems/commands/build_command.rb +5 -23
- data/lib/rubygems/commands/cert_command.rb +199 -57
- data/lib/rubygems/commands/check_command.rb +14 -39
- data/lib/rubygems/commands/cleanup_command.rb +9 -1
- data/lib/rubygems/commands/contents_command.rb +30 -12
- data/lib/rubygems/commands/dependency_command.rb +3 -8
- data/lib/rubygems/commands/environment_command.rb +13 -8
- data/lib/rubygems/commands/fetch_command.rb +3 -16
- data/lib/rubygems/commands/generate_index_command.rb +7 -47
- data/lib/rubygems/commands/help_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +69 -36
- data/lib/rubygems/commands/list_command.rb +6 -4
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/mirror_command.rb +17 -0
- data/lib/rubygems/commands/outdated_command.rb +6 -3
- data/lib/rubygems/commands/owner_command.rb +13 -5
- data/lib/rubygems/commands/pristine_command.rb +19 -4
- data/lib/rubygems/commands/push_command.rb +12 -1
- data/lib/rubygems/commands/query_command.rb +43 -27
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/search_command.rb +4 -18
- data/lib/rubygems/commands/server_command.rb +1 -1
- data/lib/rubygems/commands/setup_command.rb +124 -38
- data/lib/rubygems/commands/sources_command.rb +16 -16
- data/lib/rubygems/commands/specification_command.rb +11 -13
- data/lib/rubygems/commands/uninstall_command.rb +24 -7
- data/lib/rubygems/commands/unpack_command.rb +7 -3
- data/lib/rubygems/commands/update_command.rb +22 -36
- data/lib/rubygems/commands/yank_command.rb +98 -0
- data/lib/rubygems/compatibility.rb +51 -0
- data/lib/rubygems/config_file.rb +82 -54
- data/lib/rubygems/core_ext/kernel_gem.rb +53 -0
- data/lib/rubygems/core_ext/kernel_require.rb +119 -0
- data/lib/rubygems/defaults.rb +10 -21
- data/lib/rubygems/dependency.rb +61 -10
- data/lib/rubygems/dependency_installer.rb +157 -69
- data/lib/rubygems/dependency_list.rb +11 -19
- data/lib/rubygems/dependency_resolver.rb +562 -0
- data/lib/rubygems/deprecate.rb +40 -40
- data/lib/rubygems/errors.rb +77 -24
- data/lib/rubygems/exceptions.rb +25 -7
- data/lib/rubygems/ext/builder.rb +20 -23
- data/lib/rubygems/ext/configure_builder.rb +2 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +5 -45
- data/lib/rubygems/ext/rake_builder.rb +2 -2
- data/lib/rubygems/gem_runner.rb +3 -16
- data/lib/rubygems/gemcutter_utilities.rb +22 -7
- data/lib/rubygems/indexer.rb +6 -159
- data/lib/rubygems/install_message.rb +12 -0
- data/lib/rubygems/install_update_options.rb +56 -18
- data/lib/rubygems/installer.rb +244 -134
- data/lib/rubygems/installer_test_case.rb +71 -19
- data/lib/rubygems/mock_gem_ui.rb +17 -0
- data/lib/rubygems/name_tuple.rb +110 -0
- data/lib/rubygems/package.rb +514 -43
- data/lib/rubygems/package/digest_io.rb +64 -0
- data/lib/rubygems/package/old.rb +147 -0
- data/lib/rubygems/package/tar_header.rb +18 -55
- data/lib/rubygems/package/tar_reader.rb +20 -3
- data/lib/rubygems/package/tar_writer.rb +63 -7
- data/lib/rubygems/package_task.rb +3 -4
- data/lib/rubygems/path_support.rb +14 -7
- data/lib/rubygems/platform.rb +19 -26
- data/lib/rubygems/rdoc.rb +316 -0
- data/lib/rubygems/remote_fetcher.rb +117 -54
- data/lib/rubygems/request_set.rb +182 -0
- data/lib/rubygems/requirement.rb +63 -26
- data/lib/rubygems/security.rb +295 -555
- data/lib/rubygems/security/policies.rb +115 -0
- data/lib/rubygems/security/policy.rb +227 -0
- data/lib/rubygems/security/signer.rb +136 -0
- data/lib/rubygems/security/trust_dir.rb +104 -0
- data/lib/rubygems/server.rb +45 -55
- data/lib/rubygems/source.rb +144 -0
- data/lib/rubygems/source_list.rb +87 -0
- data/lib/rubygems/source_local.rb +92 -0
- data/lib/rubygems/source_specific_file.rb +28 -0
- data/lib/rubygems/spec_fetcher.rb +116 -184
- data/lib/rubygems/specification.rb +731 -335
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +88 -30
- data/lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem +90 -0
- data/lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem +57 -0
- data/lib/rubygems/syck_hack.rb +2 -0
- data/lib/rubygems/test_case.rb +199 -109
- data/lib/rubygems/test_utilities.rb +25 -5
- data/lib/rubygems/uninstaller.rb +62 -20
- data/lib/rubygems/user_interaction.rb +10 -0
- data/lib/rubygems/validator.rb +33 -40
- data/lib/rubygems/version.rb +19 -8
- data/setup.rb +8 -1
- data/test/rubygems/alternate_cert.pem +9 -0
- data/test/rubygems/alternate_cert_32.pem +9 -0
- data/test/rubygems/alternate_key.pem +9 -0
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/child_cert.pem +9 -0
- data/test/rubygems/child_cert_32.pem +9 -0
- data/test/rubygems/child_key.pem +9 -0
- data/test/rubygems/data/null-type.gemspec.rz +0 -0
- data/test/rubygems/expired_cert.pem +9 -0
- data/test/rubygems/future_cert.pem +9 -0
- data/test/rubygems/future_cert_32.pem +9 -0
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +9 -0
- data/test/rubygems/grandchild_cert_32.pem +9 -0
- data/test/rubygems/grandchild_key.pem +9 -0
- data/test/rubygems/invalid_issuer_cert.pem +9 -0
- data/test/rubygems/invalid_issuer_cert_32.pem +9 -0
- data/test/rubygems/invalid_key.pem +9 -0
- data/test/rubygems/invalid_signer_cert.pem +9 -0
- data/test/rubygems/invalid_signer_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_cert.pem +9 -0
- data/test/rubygems/invalidchild_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_key.pem +9 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_key.pem +7 -25
- data/test/rubygems/public_cert.pem +8 -18
- data/test/rubygems/public_cert_32.pem +10 -0
- data/test/rubygems/public_key.pem +4 -0
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -1
- data/test/rubygems/test_config.rb +4 -6
- data/test/rubygems/test_deprecate.rb +76 -0
- data/test/rubygems/test_gem.rb +318 -83
- data/test/rubygems/test_gem_available_set.rb +106 -0
- data/test/rubygems/test_gem_command.rb +10 -0
- data/test/rubygems/test_gem_command_manager.rb +55 -9
- data/test/rubygems/test_gem_commands_build_command.rb +11 -19
- data/test/rubygems/test_gem_commands_cert_command.rb +441 -42
- data/test/rubygems/test_gem_commands_cleanup_command.rb +29 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +23 -0
- data/test/rubygems/test_gem_commands_dependency_command.rb +5 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +19 -20
- data/test/rubygems/test_gem_commands_generate_index_command.rb +2 -83
- data/test/rubygems/test_gem_commands_help_command.rb +2 -1
- data/test/rubygems/test_gem_commands_install_command.rb +647 -48
- data/test/rubygems/test_gem_commands_mirror.rb +32 -0
- data/test/rubygems/test_gem_commands_owner_command.rb +4 -8
- data/test/rubygems/test_gem_commands_pristine_command.rb +99 -4
- data/test/rubygems/test_gem_commands_push_command.rb +62 -8
- data/test/rubygems/test_gem_commands_query_command.rb +51 -0
- data/test/rubygems/test_gem_commands_search_command.rb +25 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +45 -0
- data/test/rubygems/test_gem_commands_sources_command.rb +21 -6
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +91 -31
- data/test/rubygems/test_gem_commands_unpack_command.rb +3 -3
- data/test/rubygems/test_gem_commands_update_command.rb +56 -38
- data/test/rubygems/test_gem_commands_which_command.rb +4 -4
- data/test/rubygems/test_gem_commands_yank_command.rb +97 -0
- data/test/rubygems/test_gem_config_file.rb +66 -21
- data/test/rubygems/test_gem_dependency.rb +46 -0
- data/test/rubygems/test_gem_dependency_installer.rb +228 -18
- data/test/rubygems/test_gem_dependency_list.rb +0 -9
- data/test/rubygems/test_gem_dependency_resolver.rb +327 -0
- data/test/rubygems/test_gem_ext_configure_builder.rb +4 -4
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -49
- data/test/rubygems/test_gem_ext_rake_builder.rb +13 -13
- data/test/rubygems/test_gem_gem_runner.rb +27 -5
- data/test/rubygems/test_gem_gemcutter_utilities.rb +19 -0
- data/test/rubygems/test_gem_indexer.rb +14 -227
- data/test/rubygems/test_gem_install_update_options.rb +83 -3
- data/test/rubygems/test_gem_installer.rb +211 -236
- data/test/rubygems/test_gem_local_remote_options.rb +8 -2
- data/test/rubygems/test_gem_name_tuple.rb +15 -0
- data/test/rubygems/test_gem_package.rb +547 -0
- data/test/rubygems/test_gem_package_old.rb +37 -0
- data/test/rubygems/test_gem_package_tar_reader.rb +32 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +84 -1
- data/test/rubygems/test_gem_path_support.rb +4 -30
- data/test/rubygems/test_gem_platform.rb +3 -6
- data/test/rubygems/test_gem_rdoc.rb +245 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +51 -5
- data/test/rubygems/test_gem_request_set.rb +70 -0
- data/test/rubygems/test_gem_requirement.rb +53 -24
- data/test/rubygems/test_gem_security.rb +189 -43
- data/test/rubygems/test_gem_security_policy.rb +376 -0
- data/test/rubygems/test_gem_security_signer.rb +184 -0
- data/test/rubygems/test_gem_security_trust_dir.rb +94 -0
- data/test/rubygems/test_gem_server.rb +31 -36
- data/test/rubygems/test_gem_silent_ui.rb +2 -2
- data/test/rubygems/test_gem_source.rb +188 -0
- data/test/rubygems/test_gem_source_list.rb +87 -0
- data/test/rubygems/test_gem_source_local.rb +83 -0
- data/test/rubygems/test_gem_source_specific_file.rb +33 -0
- data/test/rubygems/test_gem_spec_fetcher.rb +91 -255
- data/test/rubygems/test_gem_specification.rb +293 -39
- data/test/rubygems/test_gem_uninstaller.rb +136 -13
- data/test/rubygems/test_gem_validator.rb +14 -41
- data/test/rubygems/test_gem_version.rb +15 -21
- data/test/rubygems/test_require.rb +193 -0
- data/test/rubygems/wrong_key_cert.pem +9 -0
- data/test/rubygems/wrong_key_cert_32.pem +9 -0
- metadata +171 -83
- metadata.gz.sig +1 -0
- data/CVE-2013-4287.txt +0 -36
- data/CVE-2013-4363.txt +0 -45
- data/ci_build.sh +0 -27
- data/cruise_config.rb +0 -32
- data/lib/rbconfig/datadir.rb +0 -13
- data/lib/rubygems/builder.rb +0 -99
- data/lib/rubygems/custom_require.rb +0 -69
- data/lib/rubygems/doc_manager.rb +0 -243
- data/lib/rubygems/format.rb +0 -82
- data/lib/rubygems/gem_openssl.rb +0 -90
- data/lib/rubygems/gem_path_searcher.rb +0 -172
- data/lib/rubygems/old_format.rb +0 -153
- data/lib/rubygems/package/f_sync_dir.rb +0 -23
- data/lib/rubygems/package/tar_input.rb +0 -234
- data/lib/rubygems/package/tar_output.rb +0 -146
- data/lib/rubygems/require_paths_builder.rb +0 -18
- data/lib/rubygems/source_index.rb +0 -406
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_gem_builder.rb +0 -44
- data/test/rubygems/test_gem_doc_manager.rb +0 -32
- data/test/rubygems/test_gem_ext_builder.rb +0 -58
- data/test/rubygems/test_gem_format.rb +0 -88
- data/test/rubygems/test_gem_gem_path_searcher.rb +0 -94
- data/test/rubygems/test_gem_package_tar_input.rb +0 -129
- data/test/rubygems/test_gem_package_tar_output.rb +0 -101
- data/test/rubygems/test_gem_source_index.rb +0 -250
- data/util/update_bundled_ca_certificates.rb +0 -103
@@ -14,6 +14,10 @@ class Gem::Commands::OwnerCommand < Gem::Command
|
|
14
14
|
"GEM gem to manage owners for"
|
15
15
|
end
|
16
16
|
|
17
|
+
def usage # :nodoc:
|
18
|
+
"#{program_name} GEM"
|
19
|
+
end
|
20
|
+
|
17
21
|
def initialize
|
18
22
|
super 'owner', description
|
19
23
|
add_proxy_option
|
@@ -63,12 +67,16 @@ class Gem::Commands::OwnerCommand < Gem::Command
|
|
63
67
|
|
64
68
|
def manage_owners method, name, owners
|
65
69
|
owners.each do |owner|
|
66
|
-
|
67
|
-
|
68
|
-
|
70
|
+
begin
|
71
|
+
response = rubygems_api_request method, "api/v1/gems/#{name}/owners" do |request|
|
72
|
+
request.set_form_data 'email' => owner
|
73
|
+
request.add_field "Authorization", api_key
|
74
|
+
end
|
75
|
+
|
76
|
+
with_response response
|
77
|
+
rescue
|
78
|
+
# ignore
|
69
79
|
end
|
70
|
-
|
71
|
-
with_response response
|
72
80
|
end
|
73
81
|
end
|
74
82
|
|
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'rubygems/command'
|
2
|
-
require 'rubygems/
|
2
|
+
require 'rubygems/package'
|
3
3
|
require 'rubygems/installer'
|
4
4
|
require 'rubygems/version_option'
|
5
5
|
|
@@ -24,6 +24,11 @@ class Gem::Commands::PristineCommand < Gem::Command
|
|
24
24
|
options[:extensions] = value
|
25
25
|
end
|
26
26
|
|
27
|
+
add_option('--only-executables',
|
28
|
+
'Only restore executables') do |value, options|
|
29
|
+
options[:only_executables] = value
|
30
|
+
end
|
31
|
+
|
27
32
|
add_version_option('restore to', 'pristine condition')
|
28
33
|
end
|
29
34
|
|
@@ -78,6 +83,11 @@ extensions.
|
|
78
83
|
say "Restoring gems to pristine condition..."
|
79
84
|
|
80
85
|
specs.each do |spec|
|
86
|
+
if spec.default_gem?
|
87
|
+
say "Skipped #{spec.full_name}, it is a default gem"
|
88
|
+
next
|
89
|
+
end
|
90
|
+
|
81
91
|
unless spec.extensions.empty? or options[:extensions] then
|
82
92
|
say "Skipped #{spec.full_name}, it needs to compile an extension"
|
83
93
|
next
|
@@ -96,13 +106,18 @@ extensions.
|
|
96
106
|
# TODO use installer options
|
97
107
|
install_defaults = Gem::ConfigFile::PLATFORM_DEFAULTS['install']
|
98
108
|
installer_env_shebang = install_defaults.to_s['--env-shebang']
|
99
|
-
|
109
|
+
|
100
110
|
installer = Gem::Installer.new(gem,
|
101
111
|
:wrappers => true,
|
102
112
|
:force => true,
|
103
113
|
:install_dir => spec.base_dir,
|
104
|
-
:env_shebang => installer_env_shebang
|
105
|
-
|
114
|
+
:env_shebang => installer_env_shebang,
|
115
|
+
:build_args => spec.build_args)
|
116
|
+
if options[:only_executables] then
|
117
|
+
installer.generate_bin
|
118
|
+
else
|
119
|
+
installer.install
|
120
|
+
end
|
106
121
|
|
107
122
|
say "Restored #{spec.full_name}"
|
108
123
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'rubygems/command'
|
2
2
|
require 'rubygems/local_remote_options'
|
3
3
|
require 'rubygems/gemcutter_utilities'
|
4
|
+
require 'rubygems/package'
|
4
5
|
|
5
6
|
class Gem::Commands::PushCommand < Gem::Command
|
6
7
|
include Gem::LocalRemoteOptions
|
@@ -39,13 +40,23 @@ class Gem::Commands::PushCommand < Gem::Command
|
|
39
40
|
def send_gem name
|
40
41
|
args = [:post, "api/v1/gems"]
|
41
42
|
|
42
|
-
args << options[:host] if options[:host]
|
43
43
|
|
44
44
|
if Gem.latest_rubygems_version < Gem::Version.new(Gem::VERSION) then
|
45
45
|
alert_error "Using beta/unreleased version of rubygems. Not pushing."
|
46
46
|
terminate_interaction 1
|
47
47
|
end
|
48
48
|
|
49
|
+
host = options[:host]
|
50
|
+
unless host
|
51
|
+
if gem_data = Gem::Package.new(name) then
|
52
|
+
host = gem_data.spec.metadata['default_gem_server']
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
args << host if host
|
57
|
+
|
58
|
+
say "Pushing gem to #{host || Gem.host}..."
|
59
|
+
|
49
60
|
response = rubygems_api_request(*args) do |request|
|
50
61
|
request.body = Gem.read_binary name
|
51
62
|
request.add_field "Content-Length", request.body.size
|
@@ -21,6 +21,10 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
21
21
|
options[:installed] = value
|
22
22
|
end
|
23
23
|
|
24
|
+
add_option('-I', 'Equivalent to --no-installed') do |value, options|
|
25
|
+
options[:installed] = false
|
26
|
+
end
|
27
|
+
|
24
28
|
add_version_option command, "for use with --installed"
|
25
29
|
|
26
30
|
add_option('-n', '--name-matches REGEXP',
|
@@ -80,6 +84,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
80
84
|
req = Gem::Requirement.default
|
81
85
|
# TODO: deprecate for real
|
82
86
|
dep = Gem::Deprecate.skip_during { Gem::Dependency.new name, req }
|
87
|
+
dep.prerelease = prerelease
|
83
88
|
|
84
89
|
if local? then
|
85
90
|
if prerelease and not both? then
|
@@ -97,7 +102,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
97
102
|
}
|
98
103
|
|
99
104
|
spec_tuples = specs.map do |spec|
|
100
|
-
[
|
105
|
+
[spec.name_tuple, spec]
|
101
106
|
end
|
102
107
|
|
103
108
|
output_query_results spec_tuples
|
@@ -110,13 +115,27 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
110
115
|
say
|
111
116
|
end
|
112
117
|
|
113
|
-
all = options[:all]
|
114
|
-
|
115
118
|
fetcher = Gem::SpecFetcher.fetcher
|
116
|
-
spec_tuples = fetcher.find_matching dep, all, false, prerelease
|
117
119
|
|
118
|
-
|
119
|
-
|
120
|
+
type = if options[:all]
|
121
|
+
if options[:prerelease]
|
122
|
+
:complete
|
123
|
+
else
|
124
|
+
:released
|
125
|
+
end
|
126
|
+
elsif options[:prerelease]
|
127
|
+
:prerelease
|
128
|
+
else
|
129
|
+
:latest
|
130
|
+
end
|
131
|
+
|
132
|
+
if options[:name].source.empty?
|
133
|
+
spec_tuples = fetcher.detect(type) { true }
|
134
|
+
else
|
135
|
+
spec_tuples = fetcher.detect(type) do |gem_name, ver, plat|
|
136
|
+
options[:name] === gem_name
|
137
|
+
end
|
138
|
+
end
|
120
139
|
|
121
140
|
output_query_results spec_tuples
|
122
141
|
end
|
@@ -135,32 +154,30 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
135
154
|
output = []
|
136
155
|
versions = Hash.new { |h,name| h[name] = [] }
|
137
156
|
|
138
|
-
spec_tuples.each do |spec_tuple,
|
139
|
-
versions[spec_tuple.
|
157
|
+
spec_tuples.each do |spec_tuple, source|
|
158
|
+
versions[spec_tuple.name] << [spec_tuple, source]
|
140
159
|
end
|
141
160
|
|
142
|
-
versions = versions.sort_by do |(
|
143
|
-
|
161
|
+
versions = versions.sort_by do |(n,_),_|
|
162
|
+
n.downcase
|
144
163
|
end
|
145
164
|
|
146
165
|
versions.each do |gem_name, matching_tuples|
|
147
|
-
matching_tuples = matching_tuples.sort_by
|
148
|
-
version
|
149
|
-
end.reverse
|
166
|
+
matching_tuples = matching_tuples.sort_by { |n,_| n.version }.reverse
|
150
167
|
|
151
168
|
platforms = Hash.new { |h,version| h[version] = [] }
|
152
169
|
|
153
|
-
matching_tuples.map do |
|
154
|
-
platforms[version] << platform if platform
|
170
|
+
matching_tuples.map do |n,_|
|
171
|
+
platforms[n.version] << n.platform if n.platform
|
155
172
|
end
|
156
173
|
|
157
174
|
seen = {}
|
158
175
|
|
159
|
-
matching_tuples.delete_if do |
|
160
|
-
if seen[version] then
|
176
|
+
matching_tuples.delete_if do |n,_|
|
177
|
+
if seen[n.version] then
|
161
178
|
true
|
162
179
|
else
|
163
|
-
seen[version] = true
|
180
|
+
seen[n.version] = true
|
164
181
|
false
|
165
182
|
end
|
166
183
|
end
|
@@ -169,7 +186,7 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
169
186
|
|
170
187
|
if options[:versions] then
|
171
188
|
list = if platforms.empty? or options[:details] then
|
172
|
-
matching_tuples.map { |
|
189
|
+
matching_tuples.map { |n,_| n.version }.uniq
|
173
190
|
else
|
174
191
|
platforms.sort.reverse.map do |version, pls|
|
175
192
|
if pls == [Gem::Platform::RUBY] then
|
@@ -188,12 +205,11 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
188
205
|
if options[:details] then
|
189
206
|
detail_tuple = matching_tuples.first
|
190
207
|
|
191
|
-
spec =
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
end
|
208
|
+
spec = detail_tuple.last
|
209
|
+
|
210
|
+
unless spec.kind_of? Gem::Specification
|
211
|
+
spec = spec.fetch_spec detail_tuple.first
|
212
|
+
end
|
197
213
|
|
198
214
|
entry << "\n"
|
199
215
|
|
@@ -243,9 +259,9 @@ class Gem::Commands::QueryCommand < Gem::Command
|
|
243
259
|
entry << "\n" << " Installed at: #{loaded_from}"
|
244
260
|
else
|
245
261
|
label = 'Installed at'
|
246
|
-
matching_tuples.each do |
|
262
|
+
matching_tuples.each do |n,s|
|
247
263
|
loaded_from = File.dirname File.dirname(s.loaded_from)
|
248
|
-
entry << "\n" << " #{label} (#{version}): #{loaded_from}"
|
264
|
+
entry << "\n" << " #{label} (#{n.version}): #{loaded_from}"
|
249
265
|
label = ' ' * label.length
|
250
266
|
end
|
251
267
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'rubygems/command'
|
2
2
|
require 'rubygems/version_option'
|
3
|
-
require 'rubygems/
|
3
|
+
require 'rubygems/rdoc'
|
4
4
|
|
5
5
|
class Gem::Commands::RdocCommand < Gem::Command
|
6
6
|
include Gem::VersionOption
|
@@ -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 =>
|
11
|
+
:include_rdoc => false, :include_ri => true, :overwrite => false
|
12
12
|
|
13
13
|
add_option('--all',
|
14
14
|
'Generate RDoc/RI documentation for all',
|
@@ -39,7 +39,7 @@ class Gem::Commands::RdocCommand < Gem::Command
|
|
39
39
|
end
|
40
40
|
|
41
41
|
def defaults_str # :nodoc:
|
42
|
-
"--version '#{Gem::Requirement.default}' --
|
42
|
+
"--version '#{Gem::Requirement.default}' --ri --no-overwrite"
|
43
43
|
end
|
44
44
|
|
45
45
|
def description # :nodoc:
|
@@ -54,37 +54,32 @@ The rdoc command builds RDoc and RI documentation for installed gems. Use
|
|
54
54
|
end
|
55
55
|
|
56
56
|
def execute
|
57
|
-
if options[:all] then
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
57
|
+
specs = if options[:all] then
|
58
|
+
Gem::Specification.to_a
|
59
|
+
else
|
60
|
+
get_all_gem_names.map do |name|
|
61
|
+
Gem::Specification.find_by_name name, options[:version]
|
62
|
+
end.flatten.uniq
|
63
|
+
end
|
64
|
+
|
65
|
+
if specs.empty? then
|
66
|
+
alert_error 'No matching gems found'
|
67
|
+
terminate_interaction 1
|
65
68
|
end
|
66
69
|
|
67
|
-
|
68
|
-
|
69
|
-
end
|
70
|
+
specs.each do |spec|
|
71
|
+
doc = Gem::RDoc.new spec, options[:include_rdoc], options[:include_ri]
|
70
72
|
|
71
|
-
|
72
|
-
specs.sort.each do |spec|
|
73
|
-
doc = Gem::DocManager.new(spec)
|
74
|
-
doc.generate_ri if options[:overwrite] || !doc.ri_installed?
|
75
|
-
end
|
73
|
+
doc.force = options[:overwrite]
|
76
74
|
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
doc.generate_rdoc if options[:overwrite] || !doc.rdoc_installed?
|
75
|
+
begin
|
76
|
+
doc.generate
|
77
|
+
rescue Errno::ENOENT => e
|
78
|
+
e.message =~ / - /
|
79
|
+
alert_error "Unable to document #{spec.full_name}, #{$'} is missing, skipping"
|
80
|
+
terminate_interaction 1 if specs.length == 1
|
84
81
|
end
|
85
82
|
end
|
86
|
-
|
87
|
-
true
|
88
83
|
end
|
89
84
|
|
90
85
|
end
|
@@ -1,30 +1,16 @@
|
|
1
1
|
require 'rubygems/command'
|
2
|
-
require 'rubygems/commands/
|
2
|
+
require 'rubygems/commands/list_command'
|
3
3
|
|
4
|
-
class Gem::Commands::SearchCommand < Gem::Commands::
|
4
|
+
class Gem::Commands::SearchCommand < Gem::Commands::ListCommand
|
5
5
|
|
6
6
|
def initialize
|
7
7
|
super 'search', 'Display all gems whose name contains STRING'
|
8
8
|
|
9
|
-
|
10
|
-
end
|
11
|
-
|
12
|
-
def arguments # :nodoc:
|
13
|
-
"STRING fragment of gem name to search for"
|
9
|
+
@defaults[:domain] = :remote
|
14
10
|
end
|
15
11
|
|
16
12
|
def defaults_str # :nodoc:
|
17
|
-
"--
|
18
|
-
end
|
19
|
-
|
20
|
-
def usage # :nodoc:
|
21
|
-
"#{program_name} [STRING]"
|
22
|
-
end
|
23
|
-
|
24
|
-
def execute
|
25
|
-
string = get_one_optional_argument
|
26
|
-
options[:name] = /#{string}/i
|
27
|
-
super
|
13
|
+
"--remote --no-details"
|
28
14
|
end
|
29
15
|
|
30
16
|
end
|
@@ -5,14 +5,22 @@ require 'rubygems/command'
|
|
5
5
|
# RubyGems checkout or tarball.
|
6
6
|
|
7
7
|
class Gem::Commands::SetupCommand < Gem::Command
|
8
|
+
HISTORY_HEADER = /^===\s*[\d.]+\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
9
|
+
VERSION_MATCHER = /^===\s*([\d.]+)\s*\/\s*\d{4}-\d{2}-\d{2}\s*$/
|
8
10
|
|
9
11
|
def initialize
|
10
12
|
require 'tmpdir'
|
11
13
|
|
12
14
|
super 'setup', 'Install RubyGems',
|
13
|
-
:format_executable => true, :
|
15
|
+
:format_executable => true, :document => %w[ri],
|
14
16
|
:site_or_vendor => :sitelibdir,
|
15
|
-
:destdir => '', :prefix => ''
|
17
|
+
:destdir => '', :prefix => '', :previous_version => ''
|
18
|
+
|
19
|
+
add_option '--previous-version=VERSION',
|
20
|
+
'Previous version of rubygems',
|
21
|
+
'Used for changelog processing' do |version, options|
|
22
|
+
options[:previous_version] = version
|
23
|
+
end
|
16
24
|
|
17
25
|
add_option '--prefix=PREFIX',
|
18
26
|
'Prefix path for installing RubyGems',
|
@@ -37,14 +45,37 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|
37
45
|
options[:format_executable] = value
|
38
46
|
end
|
39
47
|
|
48
|
+
add_option '--[no-]document [TYPES]', Array,
|
49
|
+
'Generate documentation for RubyGems.',
|
50
|
+
'List the documentation types you wish to',
|
51
|
+
'generate. For example: rdoc,ri' do |value, options|
|
52
|
+
options[:document] = case value
|
53
|
+
when nil then %w[rdoc ri]
|
54
|
+
when false then []
|
55
|
+
else value
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
40
59
|
add_option '--[no-]rdoc',
|
41
60
|
'Generate RDoc documentation for RubyGems' do |value, options|
|
42
|
-
|
61
|
+
if value then
|
62
|
+
options[:document] << 'rdoc'
|
63
|
+
else
|
64
|
+
options[:document].delete 'rdoc'
|
65
|
+
end
|
66
|
+
|
67
|
+
options[:document].uniq!
|
43
68
|
end
|
44
69
|
|
45
70
|
add_option '--[no-]ri',
|
46
71
|
'Generate RI documentation for RubyGems' do |value, options|
|
47
|
-
|
72
|
+
if value then
|
73
|
+
options[:document] << 'ri'
|
74
|
+
else
|
75
|
+
options[:document].delete 'ri'
|
76
|
+
end
|
77
|
+
|
78
|
+
options[:document].uniq!
|
48
79
|
end
|
49
80
|
end
|
50
81
|
|
@@ -58,7 +89,7 @@ class Gem::Commands::SetupCommand < Gem::Command
|
|
58
89
|
end
|
59
90
|
|
60
91
|
def defaults_str # :nodoc:
|
61
|
-
"--format-executable --
|
92
|
+
"--format-executable --document ri"
|
62
93
|
end
|
63
94
|
|
64
95
|
def description # :nodoc:
|
@@ -106,11 +137,13 @@ By default, this RubyGems will install gem as:
|
|
106
137
|
|
107
138
|
remove_old_bin_files bin_dir
|
108
139
|
|
140
|
+
remove_old_lib_files lib_dir
|
141
|
+
|
109
142
|
say "RubyGems #{Gem::VERSION} installed"
|
110
143
|
|
111
144
|
uninstall_old_gemcutter
|
112
145
|
|
113
|
-
install_rdoc
|
146
|
+
documentation_success = install_rdoc
|
114
147
|
|
115
148
|
say
|
116
149
|
if @verbose then
|
@@ -118,16 +151,30 @@ By default, this RubyGems will install gem as:
|
|
118
151
|
say
|
119
152
|
end
|
120
153
|
|
154
|
+
if options[:previous_version].empty?
|
155
|
+
options[:previous_version] = Gem::VERSION.sub(/[0-9]+$/, '0')
|
156
|
+
end
|
157
|
+
|
158
|
+
options[:previous_version] = Gem::Version.new(options[:previous_version])
|
159
|
+
|
121
160
|
release_notes = File.join Dir.pwd, 'History.txt'
|
122
161
|
|
123
162
|
release_notes = if File.exist? release_notes then
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
163
|
+
history = File.read release_notes
|
164
|
+
history = history.sub(/^# coding:.*?^=/m, '')
|
165
|
+
|
166
|
+
text = history.split(HISTORY_HEADER)
|
167
|
+
text.shift # correct an off-by-one generated by split
|
168
|
+
version_lines = history.scan(HISTORY_HEADER)
|
169
|
+
versions = history.scan(VERSION_MATCHER).flatten.map { |x| Gem::Version.new(x) }
|
170
|
+
|
171
|
+
history_string = ""
|
172
|
+
|
173
|
+
until versions.length == 0 or versions.shift < options[:previous_version]
|
174
|
+
history_string += version_lines.shift + text.shift
|
130
175
|
end
|
176
|
+
|
177
|
+
history_string
|
131
178
|
else
|
132
179
|
"Oh-no! Unable to find release notes!"
|
133
180
|
end
|
@@ -147,6 +194,31 @@ By default, this RubyGems will install gem as:
|
|
147
194
|
say "to remove it by hand."
|
148
195
|
say
|
149
196
|
end
|
197
|
+
|
198
|
+
if documentation_success
|
199
|
+
if options[:document].include? 'rdoc' then
|
200
|
+
say "Rdoc documentation was installed. You may now invoke:"
|
201
|
+
say " gem server"
|
202
|
+
say "and then peruse beautifully formatted documentation for your gems"
|
203
|
+
say "with your web browser."
|
204
|
+
say "If you do not wish to install this documentation in the future, use the"
|
205
|
+
say "--no-document flag, or set it as the default in your ~/.gemrc file. See"
|
206
|
+
say "'gem help env' for details."
|
207
|
+
say
|
208
|
+
end
|
209
|
+
|
210
|
+
if options[:document].include? 'ri' then
|
211
|
+
say "Ruby Interactive (ri) documentation was installed. ri is kind of like man "
|
212
|
+
say "pages for ruby libraries. You may access it like this:"
|
213
|
+
say " ri Classname"
|
214
|
+
say " ri Classname.class_method"
|
215
|
+
say " ri Classname#instance_method"
|
216
|
+
say "If you do not wish to install this documentation in the future, use the"
|
217
|
+
say "--no-document flag, or set it as the default in your ~/.gemrc file. See"
|
218
|
+
say "'gem help env' for details."
|
219
|
+
say
|
220
|
+
end
|
221
|
+
end
|
150
222
|
end
|
151
223
|
|
152
224
|
def install_executables(bin_dir)
|
@@ -210,12 +282,9 @@ TEXT
|
|
210
282
|
def install_lib(lib_dir)
|
211
283
|
say "Installing RubyGems" if @verbose
|
212
284
|
|
213
|
-
|
214
|
-
lib_files = Dir[File.join('**', '*rb')]
|
215
|
-
|
216
|
-
# Be sure to include our SSL ca bundles
|
217
|
-
lib_files += Dir[File.join('**', '*pem')]
|
285
|
+
lib_files = rb_files_in 'lib'
|
218
286
|
|
287
|
+
Dir.chdir 'lib' do
|
219
288
|
lib_files.each do |lib_file|
|
220
289
|
dest_file = File.join lib_dir, lib_file
|
221
290
|
dest_dir = File.dirname dest_file
|
@@ -231,6 +300,12 @@ TEXT
|
|
231
300
|
rubygems_name = "rubygems-#{Gem::VERSION}"
|
232
301
|
rubygems_doc_dir = File.join gem_doc_dir, rubygems_name
|
233
302
|
|
303
|
+
begin
|
304
|
+
Gem.ensure_gem_subdirectories Gem.dir
|
305
|
+
rescue SystemCallError
|
306
|
+
# ignore
|
307
|
+
end
|
308
|
+
|
234
309
|
if File.writable? gem_doc_dir and
|
235
310
|
(not File.exist? rubygems_doc_dir or
|
236
311
|
File.writable? rubygems_doc_dir) then
|
@@ -239,21 +314,26 @@ TEXT
|
|
239
314
|
rm_rf dir
|
240
315
|
end
|
241
316
|
|
242
|
-
|
243
|
-
ri_dir = File.join rubygems_doc_dir, 'ri'
|
244
|
-
say "Installing #{rubygems_name} ri into #{ri_dir}" if @verbose
|
245
|
-
run_rdoc '--ri', '--op', ri_dir
|
246
|
-
end
|
317
|
+
require 'rubygems/rdoc'
|
247
318
|
|
248
|
-
|
249
|
-
|
250
|
-
|
251
|
-
run_rdoc '--op', rdoc_dir
|
319
|
+
fake_spec = Gem::Specification.new 'rubygems', Gem::VERSION
|
320
|
+
def fake_spec.full_gem_path
|
321
|
+
File.expand_path '../../../..', __FILE__
|
252
322
|
end
|
323
|
+
|
324
|
+
generate_ri = options[:document].include? 'ri'
|
325
|
+
generate_rdoc = options[:document].include? 'rdoc'
|
326
|
+
|
327
|
+
rdoc = Gem::RDoc.new fake_spec, generate_rdoc, generate_ri
|
328
|
+
rdoc.generate
|
329
|
+
|
330
|
+
return true
|
253
331
|
elsif @verbose then
|
254
332
|
say "Skipping RDoc generation, #{gem_doc_dir} not writable"
|
255
333
|
say "Set the GEM_HOME environment variable if you want RDoc generated"
|
256
334
|
end
|
335
|
+
|
336
|
+
return false
|
257
337
|
end
|
258
338
|
|
259
339
|
def make_destination_dirs(install_destdir)
|
@@ -301,6 +381,12 @@ TEXT
|
|
301
381
|
[lib_dir, bin_dir]
|
302
382
|
end
|
303
383
|
|
384
|
+
def rb_files_in dir
|
385
|
+
Dir.chdir dir do
|
386
|
+
Dir[File.join('**', '*rb')]
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
304
390
|
def remove_old_bin_files(bin_dir)
|
305
391
|
old_bin_files = {
|
306
392
|
'gem_mirror' => 'gem mirror',
|
@@ -333,21 +419,21 @@ abort "#{deprecation_message}"
|
|
333
419
|
end
|
334
420
|
end
|
335
421
|
|
336
|
-
def
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
end
|
422
|
+
def remove_old_lib_files lib_dir
|
423
|
+
lib_files = rb_files_in 'lib'
|
424
|
+
|
425
|
+
old_lib_files = rb_files_in lib_dir
|
341
426
|
|
342
|
-
|
427
|
+
to_remove = old_lib_files - lib_files
|
343
428
|
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
args << 'LICENSE.txt' << 'MIT.txt' << 'History.txt'
|
429
|
+
Dir.chdir lib_dir do
|
430
|
+
to_remove.each do |file|
|
431
|
+
FileUtils.rm_f file
|
348
432
|
|
349
|
-
|
350
|
-
|
433
|
+
warn "unable to remove old file #{file} please remove it by hand" if
|
434
|
+
File.exist? file
|
435
|
+
end
|
436
|
+
end
|
351
437
|
end
|
352
438
|
|
353
439
|
def uninstall_old_gemcutter
|