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.

Files changed (241) hide show
  1. checksums.yaml +6 -6
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +3 -0
  4. data/.autotest +6 -3
  5. data/History.txt +137 -63
  6. data/LICENSE.txt +1 -5
  7. data/Manifest.txt +69 -32
  8. data/README.rdoc +11 -9
  9. data/Rakefile +24 -38
  10. data/bin/gem +0 -9
  11. data/bin/update_rubygems +1 -0
  12. data/lib/rubygems.rb +193 -405
  13. data/lib/rubygems/available_set.rb +95 -0
  14. data/lib/rubygems/command.rb +88 -45
  15. data/lib/rubygems/command_manager.rb +67 -40
  16. data/lib/rubygems/commands/build_command.rb +5 -23
  17. data/lib/rubygems/commands/cert_command.rb +199 -57
  18. data/lib/rubygems/commands/check_command.rb +14 -39
  19. data/lib/rubygems/commands/cleanup_command.rb +9 -1
  20. data/lib/rubygems/commands/contents_command.rb +30 -12
  21. data/lib/rubygems/commands/dependency_command.rb +3 -8
  22. data/lib/rubygems/commands/environment_command.rb +13 -8
  23. data/lib/rubygems/commands/fetch_command.rb +3 -16
  24. data/lib/rubygems/commands/generate_index_command.rb +7 -47
  25. data/lib/rubygems/commands/help_command.rb +1 -1
  26. data/lib/rubygems/commands/install_command.rb +69 -36
  27. data/lib/rubygems/commands/list_command.rb +6 -4
  28. data/lib/rubygems/commands/lock_command.rb +1 -1
  29. data/lib/rubygems/commands/mirror_command.rb +17 -0
  30. data/lib/rubygems/commands/outdated_command.rb +6 -3
  31. data/lib/rubygems/commands/owner_command.rb +13 -5
  32. data/lib/rubygems/commands/pristine_command.rb +19 -4
  33. data/lib/rubygems/commands/push_command.rb +12 -1
  34. data/lib/rubygems/commands/query_command.rb +43 -27
  35. data/lib/rubygems/commands/rdoc_command.rb +23 -28
  36. data/lib/rubygems/commands/search_command.rb +4 -18
  37. data/lib/rubygems/commands/server_command.rb +1 -1
  38. data/lib/rubygems/commands/setup_command.rb +124 -38
  39. data/lib/rubygems/commands/sources_command.rb +16 -16
  40. data/lib/rubygems/commands/specification_command.rb +11 -13
  41. data/lib/rubygems/commands/uninstall_command.rb +24 -7
  42. data/lib/rubygems/commands/unpack_command.rb +7 -3
  43. data/lib/rubygems/commands/update_command.rb +22 -36
  44. data/lib/rubygems/commands/yank_command.rb +98 -0
  45. data/lib/rubygems/compatibility.rb +51 -0
  46. data/lib/rubygems/config_file.rb +82 -54
  47. data/lib/rubygems/core_ext/kernel_gem.rb +53 -0
  48. data/lib/rubygems/core_ext/kernel_require.rb +119 -0
  49. data/lib/rubygems/defaults.rb +10 -21
  50. data/lib/rubygems/dependency.rb +61 -10
  51. data/lib/rubygems/dependency_installer.rb +157 -69
  52. data/lib/rubygems/dependency_list.rb +11 -19
  53. data/lib/rubygems/dependency_resolver.rb +562 -0
  54. data/lib/rubygems/deprecate.rb +40 -40
  55. data/lib/rubygems/errors.rb +77 -24
  56. data/lib/rubygems/exceptions.rb +25 -7
  57. data/lib/rubygems/ext/builder.rb +20 -23
  58. data/lib/rubygems/ext/configure_builder.rb +2 -2
  59. data/lib/rubygems/ext/ext_conf_builder.rb +5 -45
  60. data/lib/rubygems/ext/rake_builder.rb +2 -2
  61. data/lib/rubygems/gem_runner.rb +3 -16
  62. data/lib/rubygems/gemcutter_utilities.rb +22 -7
  63. data/lib/rubygems/indexer.rb +6 -159
  64. data/lib/rubygems/install_message.rb +12 -0
  65. data/lib/rubygems/install_update_options.rb +56 -18
  66. data/lib/rubygems/installer.rb +244 -134
  67. data/lib/rubygems/installer_test_case.rb +71 -19
  68. data/lib/rubygems/mock_gem_ui.rb +17 -0
  69. data/lib/rubygems/name_tuple.rb +110 -0
  70. data/lib/rubygems/package.rb +514 -43
  71. data/lib/rubygems/package/digest_io.rb +64 -0
  72. data/lib/rubygems/package/old.rb +147 -0
  73. data/lib/rubygems/package/tar_header.rb +18 -55
  74. data/lib/rubygems/package/tar_reader.rb +20 -3
  75. data/lib/rubygems/package/tar_writer.rb +63 -7
  76. data/lib/rubygems/package_task.rb +3 -4
  77. data/lib/rubygems/path_support.rb +14 -7
  78. data/lib/rubygems/platform.rb +19 -26
  79. data/lib/rubygems/rdoc.rb +316 -0
  80. data/lib/rubygems/remote_fetcher.rb +117 -54
  81. data/lib/rubygems/request_set.rb +182 -0
  82. data/lib/rubygems/requirement.rb +63 -26
  83. data/lib/rubygems/security.rb +295 -555
  84. data/lib/rubygems/security/policies.rb +115 -0
  85. data/lib/rubygems/security/policy.rb +227 -0
  86. data/lib/rubygems/security/signer.rb +136 -0
  87. data/lib/rubygems/security/trust_dir.rb +104 -0
  88. data/lib/rubygems/server.rb +45 -55
  89. data/lib/rubygems/source.rb +144 -0
  90. data/lib/rubygems/source_list.rb +87 -0
  91. data/lib/rubygems/source_local.rb +92 -0
  92. data/lib/rubygems/source_specific_file.rb +28 -0
  93. data/lib/rubygems/spec_fetcher.rb +116 -184
  94. data/lib/rubygems/specification.rb +731 -335
  95. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +88 -30
  96. data/lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem +90 -0
  97. data/lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem +57 -0
  98. data/lib/rubygems/syck_hack.rb +2 -0
  99. data/lib/rubygems/test_case.rb +199 -109
  100. data/lib/rubygems/test_utilities.rb +25 -5
  101. data/lib/rubygems/uninstaller.rb +62 -20
  102. data/lib/rubygems/user_interaction.rb +10 -0
  103. data/lib/rubygems/validator.rb +33 -40
  104. data/lib/rubygems/version.rb +19 -8
  105. data/setup.rb +8 -1
  106. data/test/rubygems/alternate_cert.pem +9 -0
  107. data/test/rubygems/alternate_cert_32.pem +9 -0
  108. data/test/rubygems/alternate_key.pem +9 -0
  109. data/test/rubygems/bad_rake.rb +1 -0
  110. data/test/rubygems/child_cert.pem +9 -0
  111. data/test/rubygems/child_cert_32.pem +9 -0
  112. data/test/rubygems/child_key.pem +9 -0
  113. data/test/rubygems/data/null-type.gemspec.rz +0 -0
  114. data/test/rubygems/expired_cert.pem +9 -0
  115. data/test/rubygems/future_cert.pem +9 -0
  116. data/test/rubygems/future_cert_32.pem +9 -0
  117. data/test/rubygems/good_rake.rb +1 -0
  118. data/test/rubygems/grandchild_cert.pem +9 -0
  119. data/test/rubygems/grandchild_cert_32.pem +9 -0
  120. data/test/rubygems/grandchild_key.pem +9 -0
  121. data/test/rubygems/invalid_issuer_cert.pem +9 -0
  122. data/test/rubygems/invalid_issuer_cert_32.pem +9 -0
  123. data/test/rubygems/invalid_key.pem +9 -0
  124. data/test/rubygems/invalid_signer_cert.pem +9 -0
  125. data/test/rubygems/invalid_signer_cert_32.pem +9 -0
  126. data/test/rubygems/invalidchild_cert.pem +9 -0
  127. data/test/rubygems/invalidchild_cert_32.pem +9 -0
  128. data/test/rubygems/invalidchild_key.pem +9 -0
  129. data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
  130. data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
  131. data/test/rubygems/private_key.pem +7 -25
  132. data/test/rubygems/public_cert.pem +8 -18
  133. data/test/rubygems/public_cert_32.pem +10 -0
  134. data/test/rubygems/public_key.pem +4 -0
  135. data/test/rubygems/rubygems/commands/crash_command.rb +1 -1
  136. data/test/rubygems/test_config.rb +4 -6
  137. data/test/rubygems/test_deprecate.rb +76 -0
  138. data/test/rubygems/test_gem.rb +318 -83
  139. data/test/rubygems/test_gem_available_set.rb +106 -0
  140. data/test/rubygems/test_gem_command.rb +10 -0
  141. data/test/rubygems/test_gem_command_manager.rb +55 -9
  142. data/test/rubygems/test_gem_commands_build_command.rb +11 -19
  143. data/test/rubygems/test_gem_commands_cert_command.rb +441 -42
  144. data/test/rubygems/test_gem_commands_cleanup_command.rb +29 -1
  145. data/test/rubygems/test_gem_commands_contents_command.rb +23 -0
  146. data/test/rubygems/test_gem_commands_dependency_command.rb +5 -0
  147. data/test/rubygems/test_gem_commands_fetch_command.rb +19 -20
  148. data/test/rubygems/test_gem_commands_generate_index_command.rb +2 -83
  149. data/test/rubygems/test_gem_commands_help_command.rb +2 -1
  150. data/test/rubygems/test_gem_commands_install_command.rb +647 -48
  151. data/test/rubygems/test_gem_commands_mirror.rb +32 -0
  152. data/test/rubygems/test_gem_commands_owner_command.rb +4 -8
  153. data/test/rubygems/test_gem_commands_pristine_command.rb +99 -4
  154. data/test/rubygems/test_gem_commands_push_command.rb +62 -8
  155. data/test/rubygems/test_gem_commands_query_command.rb +51 -0
  156. data/test/rubygems/test_gem_commands_search_command.rb +25 -0
  157. data/test/rubygems/test_gem_commands_setup_command.rb +45 -0
  158. data/test/rubygems/test_gem_commands_sources_command.rb +21 -6
  159. data/test/rubygems/test_gem_commands_specification_command.rb +33 -1
  160. data/test/rubygems/test_gem_commands_uninstall_command.rb +91 -31
  161. data/test/rubygems/test_gem_commands_unpack_command.rb +3 -3
  162. data/test/rubygems/test_gem_commands_update_command.rb +56 -38
  163. data/test/rubygems/test_gem_commands_which_command.rb +4 -4
  164. data/test/rubygems/test_gem_commands_yank_command.rb +97 -0
  165. data/test/rubygems/test_gem_config_file.rb +66 -21
  166. data/test/rubygems/test_gem_dependency.rb +46 -0
  167. data/test/rubygems/test_gem_dependency_installer.rb +228 -18
  168. data/test/rubygems/test_gem_dependency_list.rb +0 -9
  169. data/test/rubygems/test_gem_dependency_resolver.rb +327 -0
  170. data/test/rubygems/test_gem_ext_configure_builder.rb +4 -4
  171. data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -49
  172. data/test/rubygems/test_gem_ext_rake_builder.rb +13 -13
  173. data/test/rubygems/test_gem_gem_runner.rb +27 -5
  174. data/test/rubygems/test_gem_gemcutter_utilities.rb +19 -0
  175. data/test/rubygems/test_gem_indexer.rb +14 -227
  176. data/test/rubygems/test_gem_install_update_options.rb +83 -3
  177. data/test/rubygems/test_gem_installer.rb +211 -236
  178. data/test/rubygems/test_gem_local_remote_options.rb +8 -2
  179. data/test/rubygems/test_gem_name_tuple.rb +15 -0
  180. data/test/rubygems/test_gem_package.rb +547 -0
  181. data/test/rubygems/test_gem_package_old.rb +37 -0
  182. data/test/rubygems/test_gem_package_tar_reader.rb +32 -0
  183. data/test/rubygems/test_gem_package_tar_writer.rb +84 -1
  184. data/test/rubygems/test_gem_path_support.rb +4 -30
  185. data/test/rubygems/test_gem_platform.rb +3 -6
  186. data/test/rubygems/test_gem_rdoc.rb +245 -0
  187. data/test/rubygems/test_gem_remote_fetcher.rb +51 -5
  188. data/test/rubygems/test_gem_request_set.rb +70 -0
  189. data/test/rubygems/test_gem_requirement.rb +53 -24
  190. data/test/rubygems/test_gem_security.rb +189 -43
  191. data/test/rubygems/test_gem_security_policy.rb +376 -0
  192. data/test/rubygems/test_gem_security_signer.rb +184 -0
  193. data/test/rubygems/test_gem_security_trust_dir.rb +94 -0
  194. data/test/rubygems/test_gem_server.rb +31 -36
  195. data/test/rubygems/test_gem_silent_ui.rb +2 -2
  196. data/test/rubygems/test_gem_source.rb +188 -0
  197. data/test/rubygems/test_gem_source_list.rb +87 -0
  198. data/test/rubygems/test_gem_source_local.rb +83 -0
  199. data/test/rubygems/test_gem_source_specific_file.rb +33 -0
  200. data/test/rubygems/test_gem_spec_fetcher.rb +91 -255
  201. data/test/rubygems/test_gem_specification.rb +293 -39
  202. data/test/rubygems/test_gem_uninstaller.rb +136 -13
  203. data/test/rubygems/test_gem_validator.rb +14 -41
  204. data/test/rubygems/test_gem_version.rb +15 -21
  205. data/test/rubygems/test_require.rb +193 -0
  206. data/test/rubygems/wrong_key_cert.pem +9 -0
  207. data/test/rubygems/wrong_key_cert_32.pem +9 -0
  208. metadata +171 -83
  209. metadata.gz.sig +1 -0
  210. data/CVE-2013-4287.txt +0 -36
  211. data/CVE-2013-4363.txt +0 -45
  212. data/ci_build.sh +0 -27
  213. data/cruise_config.rb +0 -32
  214. data/lib/rbconfig/datadir.rb +0 -13
  215. data/lib/rubygems/builder.rb +0 -99
  216. data/lib/rubygems/custom_require.rb +0 -69
  217. data/lib/rubygems/doc_manager.rb +0 -243
  218. data/lib/rubygems/format.rb +0 -82
  219. data/lib/rubygems/gem_openssl.rb +0 -90
  220. data/lib/rubygems/gem_path_searcher.rb +0 -172
  221. data/lib/rubygems/old_format.rb +0 -153
  222. data/lib/rubygems/package/f_sync_dir.rb +0 -23
  223. data/lib/rubygems/package/tar_input.rb +0 -234
  224. data/lib/rubygems/package/tar_output.rb +0 -146
  225. data/lib/rubygems/require_paths_builder.rb +0 -18
  226. data/lib/rubygems/source_index.rb +0 -406
  227. data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
  228. data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
  229. data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
  230. data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
  231. data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
  232. data/test/rubygems/test_bundled_ca.rb +0 -59
  233. data/test/rubygems/test_gem_builder.rb +0 -44
  234. data/test/rubygems/test_gem_doc_manager.rb +0 -32
  235. data/test/rubygems/test_gem_ext_builder.rb +0 -58
  236. data/test/rubygems/test_gem_format.rb +0 -88
  237. data/test/rubygems/test_gem_gem_path_searcher.rb +0 -94
  238. data/test/rubygems/test_gem_package_tar_input.rb +0 -129
  239. data/test/rubygems/test_gem_package_tar_output.rb +0 -101
  240. data/test/rubygems/test_gem_source_index.rb +0 -250
  241. data/util/update_bundled_ca_certificates.rb +0 -103
@@ -48,7 +48,7 @@ class Gem::Commands::SourcesCommand < Gem::Command
48
48
  options[:update])
49
49
 
50
50
  if options[:clear_all] then
51
- path = Gem::SpecFetcher.fetcher.dir
51
+ path = File.join Gem.user_home, '.gem', 'specs'
52
52
  FileUtils.rm_rf path
53
53
 
54
54
  unless File.exist? path then
@@ -64,16 +64,19 @@ class Gem::Commands::SourcesCommand < Gem::Command
64
64
  end
65
65
  end
66
66
 
67
- if options[:add] then
68
- source_uri = options[:add]
69
- uri = URI.parse source_uri
67
+ if source_uri = options[:add] then
68
+ source = Gem::Source.new source_uri
70
69
 
71
70
  begin
72
- Gem::SpecFetcher.fetcher.load_specs uri, 'specs'
73
- Gem.sources << source_uri
74
- Gem.configuration.write
71
+ if Gem.sources.include? source_uri then
72
+ say "source #{source_uri} already present in the cache"
73
+ else
74
+ source.load_specs :released
75
+ Gem.sources << source
76
+ Gem.configuration.write
75
77
 
76
- say "#{source_uri} added to sources"
78
+ say "#{source_uri} added to sources"
79
+ end
77
80
  rescue URI::Error, ArgumentError
78
81
  say "#{source_uri} is not a URI"
79
82
  terminate_interaction 1
@@ -97,12 +100,9 @@ class Gem::Commands::SourcesCommand < Gem::Command
97
100
  end
98
101
 
99
102
  if options[:update] then
100
- fetcher = Gem::SpecFetcher.fetcher
101
-
102
- Gem.sources.each do |update_uri|
103
- update_uri = URI.parse update_uri
104
- fetcher.load_specs update_uri, 'specs'
105
- fetcher.load_specs update_uri, 'latest_specs'
103
+ Gem.sources.each_source do |src|
104
+ src.load_specs :released
105
+ src.load_specs :latest
106
106
  end
107
107
 
108
108
  say "source cache successfully updated"
@@ -112,8 +112,8 @@ class Gem::Commands::SourcesCommand < Gem::Command
112
112
  say "*** CURRENT SOURCES ***"
113
113
  say
114
114
 
115
- Gem.sources.each do |source|
116
- say source
115
+ Gem.sources.each do |src|
116
+ say src
117
117
  end
118
118
  end
119
119
  end
@@ -1,7 +1,7 @@
1
1
  require 'rubygems/command'
2
2
  require 'rubygems/local_remote_options'
3
3
  require 'rubygems/version_option'
4
- require 'rubygems/format'
4
+ require 'rubygems/package'
5
5
 
6
6
  class Gem::Commands::SpecificationCommand < Gem::Command
7
7
 
@@ -17,6 +17,7 @@ class Gem::Commands::SpecificationCommand < Gem::Command
17
17
 
18
18
  add_version_option('examine')
19
19
  add_platform_option
20
+ add_prerelease_option
20
21
 
21
22
  add_option('--all', 'Output specifications for all versions of',
22
23
  'the gem') do |value, options|
@@ -62,13 +63,13 @@ FIELD name of gemspec field to show
62
63
  "Please specify a gem name or file on the command line"
63
64
  end
64
65
 
65
- case options[:version]
66
+ case v = options[:version]
66
67
  when String
67
- req = Gem::Requirement.parse options[:version]
68
+ req = Gem::Requirement.create v
68
69
  when Gem::Requirement
69
- req = options[:version]
70
+ req = v
70
71
  else
71
- raise Gem::CommandLineError, "Unsupported version type: #{options[:version]}"
72
+ raise Gem::CommandLineError, "Unsupported version type: '#{v}'"
72
73
  end
73
74
 
74
75
  if !req.none? and options[:all]
@@ -79,7 +80,7 @@ FIELD name of gemspec field to show
79
80
  if options[:all]
80
81
  dep = Gem::Dependency.new gem
81
82
  else
82
- dep = Gem::Dependency.new gem, options[:version]
83
+ dep = Gem::Dependency.new gem, req
83
84
  end
84
85
 
85
86
  field = get_one_optional_argument
@@ -89,7 +90,7 @@ FIELD name of gemspec field to show
89
90
 
90
91
  if local? then
91
92
  if File.exist? gem then
92
- specs << Gem::Format.from_file_by_path(gem).spec rescue nil
93
+ specs << Gem::Package.new(gem).spec rescue nil
93
94
  end
94
95
 
95
96
  if specs.empty? then
@@ -98,17 +99,14 @@ FIELD name of gemspec field to show
98
99
  end
99
100
 
100
101
  if remote? then
101
- found = Gem::SpecFetcher.fetcher.fetch dep, true
102
-
103
- if dep.prerelease? or options[:prerelease]
104
- found += Gem::SpecFetcher.fetcher.fetch dep, false, true, true
105
- end
102
+ dep.prerelease = options[:prerelease]
103
+ found, _ = Gem::SpecFetcher.fetcher.spec_for_dependency dep
106
104
 
107
105
  specs.push(*found.map { |spec,| spec })
108
106
  end
109
107
 
110
108
  if specs.empty? then
111
- alert_error "Unknown gem '#{gem}'"
109
+ alert_error "No gem matching '#{dep}' found"
112
110
  terminate_interaction 1
113
111
  end
114
112
 
@@ -13,7 +13,8 @@ class Gem::Commands::UninstallCommand < Gem::Command
13
13
 
14
14
  def initialize
15
15
  super 'uninstall', 'Uninstall gems from the local repository',
16
- :version => Gem::Requirement.default, :user_install => true
16
+ :version => Gem::Requirement.default, :user_install => true,
17
+ :check_dev => false
17
18
 
18
19
  add_option('-a', '--[no-]all',
19
20
  'Uninstall all matching versions'
@@ -27,6 +28,12 @@ class Gem::Commands::UninstallCommand < Gem::Command
27
28
  options[:ignore] = value
28
29
  end
29
30
 
31
+ add_option('-D', '--[no-]-check-development',
32
+ 'Check development dependencies while uninstalling',
33
+ '(default: false)') do |value, options|
34
+ options[:check_dev] = value
35
+ end
36
+
30
37
  add_option('-x', '--[no-]executables',
31
38
  'Uninstall applicable executables without',
32
39
  'confirmation') do |value, options|
@@ -54,6 +61,12 @@ class Gem::Commands::UninstallCommand < Gem::Command
54
61
  options[:format_executable] = value
55
62
  end
56
63
 
64
+ add_option('--[no-]force',
65
+ 'Uninstall all versions of the named gems',
66
+ 'ignoring dependencies') do |value, options|
67
+ options[:force] = value
68
+ end
69
+
57
70
  add_version_option
58
71
  add_platform_option
59
72
  end
@@ -73,19 +86,23 @@ class Gem::Commands::UninstallCommand < Gem::Command
73
86
  end
74
87
 
75
88
  def execute
76
- original_path = Gem.path
89
+ # REFACTOR: stolen from cleanup_command
90
+ deplist = Gem::DependencyList.new
91
+ get_all_gem_names.uniq.each do |name|
92
+ Gem::Specification.find_all_by_name(name).each do |spec|
93
+ deplist.add spec
94
+ end
95
+ end
96
+
97
+ deps = deplist.strongly_connected_components.flatten.reverse
77
98
 
78
- get_all_gem_names.each do |gem_name|
99
+ deps.map(&:name).uniq.each do |gem_name|
79
100
  begin
80
101
  Gem::Uninstaller.new(gem_name, options).uninstall
81
- rescue Gem::InstallError => e
82
- alert e.message
83
102
  rescue Gem::GemNotInHomeException => e
84
103
  spec = e.spec
85
104
  alert("In order to remove #{spec.name}, please execute:\n" \
86
105
  "\tgem uninstall #{spec.name} --install-dir=#{spec.installation_path}")
87
- ensure
88
- Gem.use_paths(*original_path)
89
106
  end
90
107
  end
91
108
  end
@@ -69,8 +69,10 @@ class Gem::Commands::UnpackCommand < Gem::Command
69
69
  else
70
70
  basename = File.basename path, '.gem'
71
71
  target_dir = File.expand_path basename, options[:target]
72
- FileUtils.mkdir_p target_dir
73
- Gem::Installer.new(path, :unpack => true).unpack target_dir
72
+
73
+ package = Gem::Package.new path
74
+ package.extract_files target_dir
75
+
74
76
  say "Unpacked gem: '#{target_dir}'"
75
77
  end
76
78
  end
@@ -134,9 +136,11 @@ class Gem::Commands::UnpackCommand < Gem::Command
134
136
  ##
135
137
  # Extracts the Gem::Specification and raw metadata from the .gem file at
136
138
  # +path+.
139
+ #--
140
+ # TODO move to Gem::Package as #raw_spec or something
137
141
 
138
142
  def get_metadata path
139
- format = Gem::Format.from_file_by_path path
143
+ format = Gem::Package.new path
140
144
  spec = format.spec
141
145
 
142
146
  metadata = nil
@@ -1,10 +1,12 @@
1
1
  require 'rubygems/command'
2
2
  require 'rubygems/command_manager'
3
+ require 'rubygems/dependency_installer'
3
4
  require 'rubygems/install_update_options'
4
5
  require 'rubygems/local_remote_options'
5
6
  require 'rubygems/spec_fetcher'
6
7
  require 'rubygems/version_option'
7
- require 'rubygems/commands/install_command'
8
+ require 'rubygems/install_message' # must come before rdoc for messaging
9
+ require 'rubygems/rdoc'
8
10
 
9
11
  class Gem::Commands::UpdateCommand < Gem::Command
10
12
 
@@ -13,11 +15,9 @@ class Gem::Commands::UpdateCommand < Gem::Command
13
15
  include Gem::VersionOption
14
16
 
15
17
  def initialize
16
- super 'update',
17
- 'Update the named gems (or all installed gems) in the local repository',
18
- :generate_rdoc => true,
19
- :generate_ri => true,
20
- :force => false
18
+ super 'update', 'Update installed gems to the latest version',
19
+ :document => %w[rdoc ri],
20
+ :force => false
21
21
 
22
22
  add_install_update_options
23
23
 
@@ -37,6 +37,9 @@ class Gem::Commands::UpdateCommand < Gem::Command
37
37
  add_local_remote_options
38
38
  add_platform_option
39
39
  add_prerelease_option "as update targets"
40
+
41
+ @updated = []
42
+ @installer = Gem::DependencyInstaller.new options
40
43
  end
41
44
 
42
45
  def arguments # :nodoc:
@@ -44,7 +47,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
44
47
  end
45
48
 
46
49
  def defaults_str # :nodoc:
47
- "--rdoc --ri --no-force --install-dir #{Gem.dir}"
50
+ "--document --no-force --install-dir #{Gem.dir}"
48
51
  end
49
52
 
50
53
  def usage # :nodoc:
@@ -52,9 +55,6 @@ class Gem::Commands::UpdateCommand < Gem::Command
52
55
  end
53
56
 
54
57
  def execute
55
- @installer = Gem::DependencyInstaller.new options
56
- @updated = []
57
-
58
58
  hig = {}
59
59
 
60
60
  if options[:system] then
@@ -79,21 +79,7 @@ class Gem::Commands::UpdateCommand < Gem::Command
79
79
  if updated.empty? then
80
80
  say "Nothing to update"
81
81
  else
82
- say "Gems updated: #{updated.map { |spec| spec.name }.join ', '}"
83
-
84
- if options[:generate_ri] then
85
- updated.each do |gem|
86
- Gem::DocManager.new(gem, options[:rdoc_args]).generate_ri
87
- end
88
-
89
- Gem::DocManager.update_ri_cache
90
- end
91
-
92
- if options[:generate_rdoc] then
93
- updated.each do |gem|
94
- Gem::DocManager.new(gem, options[:rdoc_args]).generate_rdoc
95
- end
96
- end
82
+ say "Gems updated: #{updated.map { |spec| spec.name }.join ' '}"
97
83
  end
98
84
  end
99
85
 
@@ -112,7 +98,6 @@ class Gem::Commands::UpdateCommand < Gem::Command
112
98
 
113
99
  @installer.installed_gems.each do |spec|
114
100
  @updated << spec
115
- say "Successfully installed #{spec.full_name}" if success
116
101
  end
117
102
  end
118
103
 
@@ -178,8 +163,9 @@ class Gem::Commands::UpdateCommand < Gem::Command
178
163
 
179
164
  args = []
180
165
  args << '--prefix' << Gem.prefix if Gem.prefix
181
- args << '--no-rdoc' unless options[:generate_rdoc]
182
- args << '--no-ri' unless options[:generate_ri]
166
+ # TODO use --document for >= 1.9 , --no-rdoc --no-ri < 1.9
167
+ args << '--no-rdoc' unless options[:document].include? 'rdoc'
168
+ args << '--no-ri' unless options[:document].include? 'ri'
183
169
  args << '--no-format-executable' if options[:no_format_executable]
184
170
 
185
171
  update_dir = File.join Gem.dir, 'gems', "rubygems-update-#{version}"
@@ -205,20 +191,20 @@ class Gem::Commands::UpdateCommand < Gem::Command
205
191
  gem_names.all? { |name| /#{name}/ !~ l_spec.name }
206
192
 
207
193
  dependency = Gem::Dependency.new l_spec.name, "> #{l_spec.version}"
194
+ dependency.prerelease = options[:prerelease]
208
195
 
209
196
  fetcher = Gem::SpecFetcher.fetcher
210
- spec_tuples = fetcher.find_matching dependency
211
197
 
212
- matching_gems = spec_tuples.select do |(name, _, platform),|
213
- name == l_name and Gem::Platform.match platform
198
+ spec_tuples, _ = fetcher.search_for_dependency dependency
199
+
200
+ matching_gems = spec_tuples.select do |g,_|
201
+ g.name == l_name and g.match_platform?
214
202
  end
215
203
 
216
- highest_remote_gem = matching_gems.sort_by do |(_, version),|
217
- version
218
- end.last
204
+ highest_remote_gem = matching_gems.sort_by { |g,_| g.version }.last
219
205
 
220
- highest_remote_gem ||= [[nil, Gem::Version.new(0), nil]] # "null" object
221
- highest_remote_ver = highest_remote_gem.first[1]
206
+ highest_remote_gem ||= [Gem::NameTuple.null]
207
+ highest_remote_ver = highest_remote_gem.first.version
222
208
 
223
209
  if system or (l_spec.version < highest_remote_ver) then
224
210
  result << [l_spec.name, [l_spec.version, highest_remote_ver].max]
@@ -0,0 +1,98 @@
1
+ require 'rubygems/command'
2
+ require 'rubygems/local_remote_options'
3
+ require 'rubygems/version_option'
4
+ require 'rubygems/gemcutter_utilities'
5
+
6
+ class Gem::Commands::YankCommand < Gem::Command
7
+ include Gem::LocalRemoteOptions
8
+ include Gem::VersionOption
9
+ include Gem::GemcutterUtilities
10
+
11
+ def description # :nodoc:
12
+ 'Remove a specific gem version release from RubyGems.org'
13
+ end
14
+
15
+ def arguments # :nodoc:
16
+ "GEM name of gem"
17
+ end
18
+
19
+ def usage # :nodoc:
20
+ "#{program_name} GEM -v VERSION [-p PLATFORM] [--undo] [--key KEY_NAME]"
21
+ end
22
+
23
+ def initialize
24
+ super 'yank', description
25
+
26
+ add_version_option("remove")
27
+ add_platform_option("remove")
28
+
29
+ add_option('--undo') do |value, options|
30
+ options[:undo] = true
31
+ end
32
+
33
+ add_option('-k', '--key KEY_NAME',
34
+ 'Use API key from your gem credentials file') do |value, options|
35
+ options[:key] = value
36
+ end
37
+ end
38
+
39
+ def execute
40
+ sign_in
41
+
42
+ version = get_version_from_requirements(options[:version])
43
+ platform = get_platform_from_requirements(options)
44
+ api_key = Gem.configuration.rubygems_api_key
45
+ api_key = Gem.configuration.api_keys[options[:key].to_sym] if options[:key]
46
+
47
+ if version then
48
+ if options[:undo] then
49
+ unyank_gem(version, platform, api_key)
50
+ else
51
+ yank_gem(version, platform, api_key)
52
+ end
53
+ else
54
+ say "A version argument is required: #{usage}"
55
+ terminate_interaction
56
+ end
57
+ end
58
+
59
+ def yank_gem(version, platform, api_key)
60
+ say "Yanking gem from #{self.host}..."
61
+ yank_api_request(:delete, version, platform, "api/v1/gems/yank", api_key)
62
+ end
63
+
64
+ def unyank_gem(version, platform, api_key)
65
+ say "Unyanking gem from #{host}..."
66
+ yank_api_request(:put, version, platform, "api/v1/gems/unyank", api_key)
67
+ end
68
+
69
+ private
70
+
71
+ def yank_api_request(method, version, platform, api, api_key)
72
+ name = get_one_gem_name
73
+ response = rubygems_api_request(method, api) do |request|
74
+ request.add_field("Authorization", api_key)
75
+
76
+ data = {
77
+ 'gem_name' => name,
78
+ 'version' => version,
79
+ }
80
+ data['platform'] = platform if platform
81
+
82
+ request.set_form_data data
83
+ end
84
+ say response.body
85
+ end
86
+
87
+ def get_version_from_requirements(requirements)
88
+ requirements.requirements.first[1].version
89
+ rescue
90
+ nil
91
+ end
92
+
93
+ def get_platform_from_requirements(requirements)
94
+ Gem.platforms[1].to_s if requirements.key? :added_platform
95
+ end
96
+
97
+ end
98
+