rubygems-update 1.8.30 → 2.0.0.preview2
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.
- 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
|