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
@@ -20,51 +20,51 @@
20
20
  # end
21
21
  # end
22
22
 
23
- module Gem
24
- module Deprecate
23
+ module Gem::Deprecate
25
24
 
26
- def self.skip # :nodoc:
27
- @skip ||= false
28
- end
29
-
30
- def self.skip= v # :nodoc:
31
- @skip = v
32
- end
25
+ def self.skip # :nodoc:
26
+ @skip ||= false
27
+ end
33
28
 
34
- ##
35
- # Temporarily turn off warnings. Intended for tests only.
29
+ def self.skip= v # :nodoc:
30
+ @skip = v
31
+ end
36
32
 
37
- def skip_during
38
- Gem::Deprecate.skip, original = true, Gem::Deprecate.skip
39
- yield
40
- ensure
41
- Gem::Deprecate.skip = original
42
- end
33
+ ##
34
+ # Temporarily turn off warnings. Intended for tests only.
43
35
 
44
- ##
45
- # Simple deprecation method that deprecates +name+ by wrapping it up
46
- # in a dummy method. It warns on each call to the dummy method
47
- # telling the user of +repl+ (unless +repl+ is :none) and the
48
- # year/month that it is planned to go away.
36
+ def skip_during
37
+ Gem::Deprecate.skip, original = true, Gem::Deprecate.skip
38
+ yield
39
+ ensure
40
+ Gem::Deprecate.skip = original
41
+ end
49
42
 
50
- def deprecate name, repl, year, month
51
- class_eval {
52
- old = "_deprecated_#{name}"
53
- alias_method old, name
54
- define_method name do |*args, &block| # TODO: really works on 1.8.7?
55
- klass = self.kind_of? Module
56
- target = klass ? "#{self}." : "#{self.class}#"
57
- msg = [ "NOTE: #{target}#{name} is deprecated",
58
- repl == :none ? " with no replacement" : ", use #{repl}",
59
- ". It will be removed on or after %4d-%02d-01." % [year, month],
60
- "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
61
- ]
62
- warn "#{msg.join}." unless Gem::Deprecate.skip
63
- send old, *args, &block
64
- end
65
- }
66
- end
43
+ ##
44
+ # Simple deprecation method that deprecates +name+ by wrapping it up
45
+ # in a dummy method. It warns on each call to the dummy method
46
+ # telling the user of +repl+ (unless +repl+ is :none) and the
47
+ # year/month that it is planned to go away.
67
48
 
68
- module_function :deprecate, :skip_during
49
+ def deprecate name, repl, year, month
50
+ class_eval {
51
+ old = "_deprecated_#{name}"
52
+ alias_method old, name
53
+ define_method name do |*args, &block| # TODO: really works on 1.8.7?
54
+ klass = self.kind_of? Module
55
+ target = klass ? "#{self}." : "#{self.class}#"
56
+ msg = [ "NOTE: #{target}#{name} is deprecated",
57
+ repl == :none ? " with no replacement" : "; use #{repl} instead",
58
+ ". It will be removed on or after %4d-%02d-01." % [year, month],
59
+ "\n#{target}#{name} called from #{Gem.location_of_caller.join(":")}",
60
+ ]
61
+ warn "#{msg.join}." unless Gem::Deprecate.skip
62
+ send old, *args, &block
63
+ end
64
+ }
69
65
  end
66
+
67
+ module_function :deprecate, :skip_during
68
+
70
69
  end
70
+
@@ -1,35 +1,88 @@
1
- class Gem::ErrorReason; end
2
-
3
- # Generated when trying to lookup a gem to indicate that the gem
4
- # was found, but that it isn't usable on the current platform.
5
- #
6
- # fetch and install read these and report them to the user to aid
7
- # in figuring out why a gem couldn't be installed.
1
+ ##
2
+ # This file contains all the various exceptions and other errors that are used
3
+ # inside of RubyGems.
8
4
  #
9
- class Gem::PlatformMismatch < Gem::ErrorReason
5
+ # DOC: Confirm _all_
10
6
 
11
- attr_reader :name
12
- attr_reader :version
13
- attr_reader :platforms
7
+ module Gem
8
+ ##
9
+ # Raised when RubyGems is unable to load or activate a gem. Contains the
10
+ # name and version requirements of the gem that either conflicts with
11
+ # already activated gems or that RubyGems is otherwise unable to activate.
14
12
 
15
- def initialize(name, version)
16
- @name = name
17
- @version = version
18
- @platforms = []
19
- end
13
+ class LoadError < ::LoadError
14
+ # Name of gem
15
+ attr_accessor :name
20
16
 
21
- def add_platform(platform)
22
- @platforms << platform
17
+ # Version requirement of gem
18
+ attr_accessor :requirement
23
19
  end
24
20
 
25
- def wordy
26
- prefix = "Found #{@name} (#{@version})"
21
+ # FIX: does this need to exist? The subclass is the only other reference
22
+ # I can find.
23
+ class ErrorReason; end
24
+
25
+ # Generated when trying to lookup a gem to indicate that the gem
26
+ # was found, but that it isn't usable on the current platform.
27
+ #
28
+ # fetch and install read these and report them to the user to aid
29
+ # in figuring out why a gem couldn't be installed.
30
+ #
31
+ class PlatformMismatch < ErrorReason
32
+
33
+ ##
34
+ # the name of the gem
35
+ attr_reader :name
36
+
37
+ ##
38
+ # the version
39
+ attr_reader :version
40
+
41
+ ##
42
+ # The platforms that are mismatched
43
+ attr_reader :platforms
44
+
45
+ def initialize(name, version)
46
+ @name = name
47
+ @version = version
48
+ @platforms = []
49
+ end
27
50
 
28
- if @platforms.size == 1
29
- "#{prefix}, but was for platform #{@platforms[0]}"
30
- else
31
- "#{prefix}, but was for platforms #{@platforms.join(' ,')}"
51
+ ##
52
+ # append a platform to the list of mismatched platforms.
53
+ #
54
+ # Platforms are added via this instead of injected via the constructor
55
+ # so that we can loop over a list of mismatches and just add them rather
56
+ # than perform some kind of calculation mismatch summary before creation.
57
+ def add_platform(platform)
58
+ @platforms << platform
59
+ end
60
+
61
+ ##
62
+ # A wordy description of the error.
63
+ def wordy
64
+ "Found %s (%), but was for platform%s %s" %
65
+ [@name,
66
+ @version,
67
+ @platforms.size == 1 ? 's' : '',
68
+ @platforms.join(' ,')]
32
69
  end
33
70
  end
34
71
 
72
+ ##
73
+ # An error that indicates we weren't able to fetch some
74
+ # data from a source
75
+
76
+ class SourceFetchProblem < ErrorReason
77
+ def initialize(source, error)
78
+ @source = source
79
+ @error = error
80
+ end
81
+
82
+ attr_reader :source, :error
83
+
84
+ def wordy
85
+ "Unable to download data from #{@source.uri} - #{@error.message}"
86
+ end
87
+ end
35
88
  end
@@ -1,7 +1,14 @@
1
+ # TODO: the documentation in here is terrible.
2
+ #
3
+ # Each exception needs a brief description and the scenarios where it is
4
+ # likely to be raised
5
+
1
6
  ##
2
7
  # Base exception class for RubyGems. All exception raised by RubyGems are a
3
8
  # subclass of this one.
4
- class Gem::Exception < RuntimeError; end
9
+ class Gem::Exception < RuntimeError
10
+ attr_accessor :source_exception
11
+ end
5
12
 
6
13
  class Gem::CommandLineError < Gem::Exception; end
7
14
 
@@ -24,11 +31,18 @@ class Gem::EndOfYAMLException < Gem::Exception; end
24
31
 
25
32
  ##
26
33
  # Signals that a file permission error is preventing the user from
27
- # installing in the requested directories.
34
+ # operating on the given directory.
35
+
28
36
  class Gem::FilePermissionError < Gem::Exception
29
- def initialize(path)
30
- super("You don't have write permissions into the #{path} directory.")
37
+
38
+ attr_reader :directory
39
+
40
+ def initialize directory
41
+ @directory = directory
42
+
43
+ super "You don't have write permissions for the #{directory} directory."
31
44
  end
45
+
32
46
  end
33
47
 
34
48
  ##
@@ -37,9 +51,12 @@ class Gem::FormatException < Gem::Exception
37
51
  attr_accessor :file_path
38
52
  end
39
53
 
40
- class Gem::GemNotFoundException < Gem::Exception
41
- def initialize(msg, name=nil, version=nil, errors=nil)
42
- super msg
54
+ class Gem::GemNotFoundException < Gem::Exception; end
55
+
56
+ class Gem::SpecificGemNotFoundException < Gem::GemNotFoundException
57
+ def initialize(name, version, errors=nil)
58
+ super "Could not find a valid gem '#{name}' (#{version}) locally or in a repository"
59
+
43
60
  @name = name
44
61
  @version = version
45
62
  @errors = errors
@@ -89,3 +106,4 @@ class Gem::SystemExitException < SystemExit
89
106
  end
90
107
 
91
108
  end
109
+
@@ -4,18 +4,8 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'thread'
8
-
9
7
  class Gem::Ext::Builder
10
8
 
11
- ##
12
- # The builder shells-out to run various commands after changing the
13
- # directory. This means multiple installations cannot be allowed to build
14
- # extensions in parallel as they may change each other's directories leading
15
- # to broken extensions or failed installations.
16
-
17
- CHDIR_MUTEX = Mutex.new # :nodoc:
18
-
19
9
  def self.class_name
20
10
  name =~ /Ext::(.*)Builder/
21
11
  $1.downcase
@@ -26,23 +16,22 @@ class Gem::Ext::Builder
26
16
  raise Gem::InstallError, "Makefile not found:\n\n#{results.join "\n"}"
27
17
  end
28
18
 
19
+ mf = Gem.read_binary 'Makefile'
20
+ mf = mf.gsub(/^RUBYARCHDIR\s*=\s*\$[^$]*/, "RUBYARCHDIR = #{dest_path}")
21
+ mf = mf.gsub(/^RUBYLIBDIR\s*=\s*\$[^$]*/, "RUBYLIBDIR = #{dest_path}")
22
+
23
+ File.open('Makefile', 'wb') {|f| f.print mf}
24
+
29
25
  # try to find make program from Ruby configure arguments first
30
26
  RbConfig::CONFIG['configure_args'] =~ /with-make-prog\=(\w+)/
31
- make_program = $1 || ENV['make']
27
+ make_program = $1 || ENV['MAKE'] || ENV['make']
32
28
  unless make_program then
33
29
  make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
34
30
  end
35
31
 
36
- destdir = '"DESTDIR=%s"' % ENV['DESTDIR'] if RUBY_VERSION > '2.0'
37
-
38
- ['', 'install'].each do |target|
39
- # Pass DESTDIR via command line to override what's in MAKEFLAGS
40
- cmd = [
41
- make_program,
42
- destdir,
43
- target
44
- ].join(' ').rstrip
45
- run(cmd, results, "make #{target}".rstrip)
32
+ ['', ' install'].each do |target|
33
+ cmd = "#{make_program}#{target}"
34
+ run(cmd, results, "make#{target}")
46
35
  end
47
36
  end
48
37
 
@@ -51,10 +40,18 @@ class Gem::Ext::Builder
51
40
  end
52
41
 
53
42
  def self.run(command, results, command_name = nil)
54
- results << command
55
- results << `#{command} #{redirector}`
43
+ verbose = Gem.configuration.really_verbose
44
+
45
+ if verbose
46
+ puts(command)
47
+ system(command)
48
+ else
49
+ results << command
50
+ results << `#{command} #{redirector}`
51
+ end
56
52
 
57
53
  unless $?.success? then
54
+ results << "Building has failed. See above output for more information on the failure." if verbose
58
55
  raise Gem::InstallError, "#{command_name || class_name} failed:\n\n#{results.join "\n"}"
59
56
  end
60
57
  end
@@ -8,10 +8,10 @@ require 'rubygems/ext/builder'
8
8
 
9
9
  class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
10
10
 
11
- def self.build(extension, directory, dest_path, results)
11
+ def self.build(extension, directory, dest_path, results, args=[])
12
12
  unless File.exist?('Makefile') then
13
13
  cmd = "sh ./configure --prefix=#{dest_path}"
14
- cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
14
+ cmd << " #{args.join ' '}" unless args.empty?
15
15
 
16
16
  run cmd, results
17
17
  end
@@ -6,58 +6,18 @@
6
6
 
7
7
  require 'rubygems/ext/builder'
8
8
  require 'rubygems/command'
9
- require 'fileutils'
10
- require 'tempfile'
11
9
 
12
10
  class Gem::Ext::ExtConfBuilder < Gem::Ext::Builder
13
- FileEntry = FileUtils::Entry_ # :nodoc:
14
11
 
15
- def self.build(extension, directory, dest_path, results)
16
- tmp_dest = Dir.mktmpdir(".gem.", ".")
12
+ def self.build(extension, directory, dest_path, results, args=[])
13
+ cmd = "#{Gem.ruby} #{File.basename extension}"
14
+ cmd << " #{args.join ' '}" unless args.empty?
17
15
 
18
- t = nil
19
- Tempfile.open %w"siteconf .rb", "." do |siteconf|
20
- t = siteconf
21
- siteconf.puts "require 'rbconfig'"
22
- siteconf.puts "dest_path = #{(tmp_dest || dest_path).dump}"
23
- %w[sitearchdir sitelibdir].each do |dir|
24
- siteconf.puts "RbConfig::MAKEFILE_CONFIG['#{dir}'] = dest_path"
25
- siteconf.puts "RbConfig::CONFIG['#{dir}'] = dest_path"
26
- end
16
+ run cmd, results
27
17
 
28
- siteconf.flush
29
-
30
- rubyopt = ENV["RUBYOPT"]
31
- destdir = ENV["DESTDIR"]
32
-
33
- begin
34
- ENV["RUBYOPT"] = ["-r#{siteconf.path}", rubyopt].compact.join(' ')
35
- cmd = [Gem.ruby, File.basename(extension), *Gem::Command.build_args].join ' '
36
-
37
- run cmd, results
38
-
39
- ENV["DESTDIR"] = nil
40
- ENV["RUBYOPT"] = rubyopt
41
- siteconf.unlink
42
-
43
- make dest_path, results
44
-
45
- if tmp_dest
46
- FileEntry.new(tmp_dest).traverse do |ent|
47
- destent = ent.class.new(dest_path, ent.rel)
48
- destent.exist? or File.rename(ent.path, destent.path)
49
- end
50
- end
51
- ensure
52
- ENV["RUBYOPT"] = rubyopt
53
- ENV["DESTDIR"] = destdir
54
- end
55
- end
56
- t.unlink if t and t.path
18
+ make dest_path, results
57
19
 
58
20
  results
59
- ensure
60
- FileUtils.rm_rf tmp_dest if tmp_dest
61
21
  end
62
22
 
63
23
  end
@@ -9,10 +9,10 @@ require 'rubygems/command'
9
9
 
10
10
  class Gem::Ext::RakeBuilder < Gem::Ext::Builder
11
11
 
12
- def self.build(extension, directory, dest_path, results)
12
+ def self.build(extension, directory, dest_path, results, args=[])
13
13
  if File.basename(extension) =~ /mkrf_conf/i then
14
14
  cmd = "#{Gem.ruby} #{File.basename extension}"
15
- cmd << " #{Gem::Command.build_args.join " "}" unless Gem::Command.build_args.empty?
15
+ cmd << " #{args.join " "}" unless args.empty?
16
16
  run cmd, results
17
17
  end
18
18
 
@@ -4,10 +4,9 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require "rubygems"
7
+ require 'rubygems'
8
8
  require 'rubygems/command_manager'
9
9
  require 'rubygems/config_file'
10
- require 'rubygems/doc_manager'
11
10
 
12
11
  ##
13
12
  # Load additional plugins from $LOAD_PATH
@@ -29,25 +28,21 @@ class Gem::GemRunner
29
28
  # TODO: nuke these options
30
29
  @command_manager_class = options[:command_manager] || Gem::CommandManager
31
30
  @config_file_class = options[:config_file] || Gem::ConfigFile
32
- @doc_manager_class = options[:doc_manager] || Gem::DocManager
33
31
  end
34
32
 
35
33
  ##
36
34
  # Run the gem command with the following arguments.
37
35
 
38
36
  def run(args)
39
- start_time = Time.now
40
-
41
37
  if args.include?('--')
42
38
  # We need to preserve the original ARGV to use for passing gem options
43
39
  # to source gems. If there is a -- in the line, strip all options after
44
40
  # it...its for the source building process.
41
+ # TODO use slice!
45
42
  build_args = args[args.index("--") + 1...args.length]
46
43
  args = args[0...args.index("--")]
47
44
  end
48
45
 
49
- Gem::Command.build_args = build_args if build_args
50
-
51
46
  do_configuration args
52
47
  cmd = @command_manager_class.instance
53
48
 
@@ -62,14 +57,7 @@ class Gem::GemRunner
62
57
  Gem::Command.add_specific_extra_args command_name, config_args
63
58
  end
64
59
 
65
- cmd.run Gem.configuration.args
66
- end_time = Time.now
67
-
68
- if Gem.configuration.benchmark then
69
- printf "\nExecution time: %0.2f seconds.\n", end_time - start_time
70
- puts "Press Enter to finish"
71
- STDIN.gets
72
- end
60
+ cmd.run Gem.configuration.args, build_args
73
61
  end
74
62
 
75
63
  private
@@ -78,7 +66,6 @@ class Gem::GemRunner
78
66
  Gem.configuration = @config_file_class.new(args)
79
67
  Gem.use_paths Gem.configuration[:gemhome], Gem.configuration[:gempath]
80
68
  Gem::Command.extra_args = Gem.configuration[:gem]
81
- @doc_manager_class.configured_args = Gem.configuration[:rdoc]
82
69
  end
83
70
 
84
71
  end