slimgems 1.3.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (185) hide show
  1. data/ChangeLog +5811 -0
  2. data/History.txt +887 -0
  3. data/LICENSE.txt +51 -0
  4. data/README.md +87 -0
  5. data/Rakefile +120 -0
  6. data/bin/gem +25 -0
  7. data/bin/update_slimgems +35 -0
  8. data/bootstrap/Rakefile +4 -0
  9. data/hide_lib_for_update/note.txt +5 -0
  10. data/lib/gauntlet_rubygems.rb +50 -0
  11. data/lib/rbconfig/datadir.rb +20 -0
  12. data/lib/rubygems.rb +1220 -0
  13. data/lib/rubygems/builder.rb +102 -0
  14. data/lib/rubygems/command.rb +534 -0
  15. data/lib/rubygems/command_manager.rb +182 -0
  16. data/lib/rubygems/commands/build_command.rb +53 -0
  17. data/lib/rubygems/commands/cert_command.rb +86 -0
  18. data/lib/rubygems/commands/check_command.rb +80 -0
  19. data/lib/rubygems/commands/cleanup_command.rb +106 -0
  20. data/lib/rubygems/commands/contents_command.rb +98 -0
  21. data/lib/rubygems/commands/dependency_command.rb +195 -0
  22. data/lib/rubygems/commands/environment_command.rb +132 -0
  23. data/lib/rubygems/commands/fetch_command.rb +67 -0
  24. data/lib/rubygems/commands/generate_index_command.rb +133 -0
  25. data/lib/rubygems/commands/help_command.rb +172 -0
  26. data/lib/rubygems/commands/install_command.rb +178 -0
  27. data/lib/rubygems/commands/list_command.rb +35 -0
  28. data/lib/rubygems/commands/lock_command.rb +110 -0
  29. data/lib/rubygems/commands/mirror_command.rb +111 -0
  30. data/lib/rubygems/commands/outdated_command.rb +33 -0
  31. data/lib/rubygems/commands/owner_command.rb +75 -0
  32. data/lib/rubygems/commands/pristine_command.rb +93 -0
  33. data/lib/rubygems/commands/push_command.rb +56 -0
  34. data/lib/rubygems/commands/query_command.rb +280 -0
  35. data/lib/rubygems/commands/rdoc_command.rb +91 -0
  36. data/lib/rubygems/commands/search_command.rb +31 -0
  37. data/lib/rubygems/commands/server_command.rb +86 -0
  38. data/lib/rubygems/commands/setup_command.rb +387 -0
  39. data/lib/rubygems/commands/sources_command.rb +157 -0
  40. data/lib/rubygems/commands/specification_command.rb +125 -0
  41. data/lib/rubygems/commands/stale_command.rb +27 -0
  42. data/lib/rubygems/commands/uninstall_command.rb +83 -0
  43. data/lib/rubygems/commands/unpack_command.rb +121 -0
  44. data/lib/rubygems/commands/update_command.rb +212 -0
  45. data/lib/rubygems/commands/which_command.rb +86 -0
  46. data/lib/rubygems/config_file.rb +345 -0
  47. data/lib/rubygems/custom_require.rb +44 -0
  48. data/lib/rubygems/defaults.rb +101 -0
  49. data/lib/rubygems/dependency.rb +227 -0
  50. data/lib/rubygems/dependency_installer.rb +286 -0
  51. data/lib/rubygems/dependency_list.rb +208 -0
  52. data/lib/rubygems/doc_manager.rb +242 -0
  53. data/lib/rubygems/errors.rb +35 -0
  54. data/lib/rubygems/exceptions.rb +91 -0
  55. data/lib/rubygems/ext.rb +18 -0
  56. data/lib/rubygems/ext/builder.rb +56 -0
  57. data/lib/rubygems/ext/configure_builder.rb +25 -0
  58. data/lib/rubygems/ext/ext_conf_builder.rb +24 -0
  59. data/lib/rubygems/ext/rake_builder.rb +39 -0
  60. data/lib/rubygems/format.rb +81 -0
  61. data/lib/rubygems/gem_openssl.rb +92 -0
  62. data/lib/rubygems/gem_path_searcher.rb +100 -0
  63. data/lib/rubygems/gem_runner.rb +79 -0
  64. data/lib/rubygems/gemcutter_utilities.rb +49 -0
  65. data/lib/rubygems/indexer.rb +720 -0
  66. data/lib/rubygems/install_update_options.rb +125 -0
  67. data/lib/rubygems/installer.rb +604 -0
  68. data/lib/rubygems/local_remote_options.rb +135 -0
  69. data/lib/rubygems/old_format.rb +153 -0
  70. data/lib/rubygems/package.rb +97 -0
  71. data/lib/rubygems/package/f_sync_dir.rb +23 -0
  72. data/lib/rubygems/package/tar_header.rb +266 -0
  73. data/lib/rubygems/package/tar_input.rb +222 -0
  74. data/lib/rubygems/package/tar_output.rb +144 -0
  75. data/lib/rubygems/package/tar_reader.rb +106 -0
  76. data/lib/rubygems/package/tar_reader/entry.rb +141 -0
  77. data/lib/rubygems/package/tar_writer.rb +241 -0
  78. data/lib/rubygems/package_task.rb +126 -0
  79. data/lib/rubygems/platform.rb +183 -0
  80. data/lib/rubygems/remote_fetcher.rb +414 -0
  81. data/lib/rubygems/require_paths_builder.rb +18 -0
  82. data/lib/rubygems/requirement.rb +153 -0
  83. data/lib/rubygems/security.rb +814 -0
  84. data/lib/rubygems/server.rb +872 -0
  85. data/lib/rubygems/source_index.rb +597 -0
  86. data/lib/rubygems/source_info_cache.rb +395 -0
  87. data/lib/rubygems/source_info_cache_entry.rb +56 -0
  88. data/lib/rubygems/spec_fetcher.rb +337 -0
  89. data/lib/rubygems/specification.rb +1486 -0
  90. data/lib/rubygems/test_utilities.rb +147 -0
  91. data/lib/rubygems/text.rb +65 -0
  92. data/lib/rubygems/uninstaller.rb +278 -0
  93. data/lib/rubygems/user_interaction.rb +527 -0
  94. data/lib/rubygems/validator.rb +240 -0
  95. data/lib/rubygems/version.rb +316 -0
  96. data/lib/rubygems/version_option.rb +65 -0
  97. data/lib/ubygems.rb +10 -0
  98. data/setup.rb +42 -0
  99. data/test/bogussources.rb +8 -0
  100. data/test/data/gem-private_key.pem +27 -0
  101. data/test/data/gem-public_cert.pem +20 -0
  102. data/test/fake_certlib/openssl.rb +7 -0
  103. data/test/foo/discover.rb +0 -0
  104. data/test/functional.rb +92 -0
  105. data/test/gem_installer_test_case.rb +97 -0
  106. data/test/gem_package_tar_test_case.rb +132 -0
  107. data/test/gemutilities.rb +605 -0
  108. data/test/insure_session.rb +43 -0
  109. data/test/mockgemui.rb +56 -0
  110. data/test/plugin/exception/rubygems_plugin.rb +2 -0
  111. data/test/plugin/load/rubygems_plugin.rb +1 -0
  112. data/test/plugin/standarderror/rubygems_plugin.rb +2 -0
  113. data/test/private_key.pem +27 -0
  114. data/test/public_cert.pem +20 -0
  115. data/test/rubygems_plugin.rb +21 -0
  116. data/test/simple_gem.rb +66 -0
  117. data/test/test_config.rb +12 -0
  118. data/test/test_gem.rb +766 -0
  119. data/test/test_gem_builder.rb +27 -0
  120. data/test/test_gem_command.rb +178 -0
  121. data/test/test_gem_command_manager.rb +207 -0
  122. data/test/test_gem_commands_build_command.rb +74 -0
  123. data/test/test_gem_commands_cert_command.rb +124 -0
  124. data/test/test_gem_commands_check_command.rb +18 -0
  125. data/test/test_gem_commands_contents_command.rb +156 -0
  126. data/test/test_gem_commands_dependency_command.rb +216 -0
  127. data/test/test_gem_commands_environment_command.rb +144 -0
  128. data/test/test_gem_commands_fetch_command.rb +76 -0
  129. data/test/test_gem_commands_generate_index_command.rb +135 -0
  130. data/test/test_gem_commands_install_command.rb +315 -0
  131. data/test/test_gem_commands_list_command.rb +36 -0
  132. data/test/test_gem_commands_lock_command.rb +68 -0
  133. data/test/test_gem_commands_mirror_command.rb +60 -0
  134. data/test/test_gem_commands_outdated_command.rb +40 -0
  135. data/test/test_gem_commands_owner_command.rb +105 -0
  136. data/test/test_gem_commands_pristine_command.rb +108 -0
  137. data/test/test_gem_commands_push_command.rb +81 -0
  138. data/test/test_gem_commands_query_command.rb +426 -0
  139. data/test/test_gem_commands_server_command.rb +59 -0
  140. data/test/test_gem_commands_sources_command.rb +209 -0
  141. data/test/test_gem_commands_specification_command.rb +139 -0
  142. data/test/test_gem_commands_stale_command.rb +38 -0
  143. data/test/test_gem_commands_uninstall_command.rb +83 -0
  144. data/test/test_gem_commands_unpack_command.rb +199 -0
  145. data/test/test_gem_commands_update_command.rb +353 -0
  146. data/test/test_gem_commands_which_command.rb +66 -0
  147. data/test/test_gem_config_file.rb +287 -0
  148. data/test/test_gem_dependency.rb +149 -0
  149. data/test/test_gem_dependency_installer.rb +661 -0
  150. data/test/test_gem_dependency_list.rb +230 -0
  151. data/test/test_gem_doc_manager.rb +31 -0
  152. data/test/test_gem_ext_configure_builder.rb +84 -0
  153. data/test/test_gem_ext_ext_conf_builder.rb +173 -0
  154. data/test/test_gem_ext_rake_builder.rb +81 -0
  155. data/test/test_gem_format.rb +70 -0
  156. data/test/test_gem_gem_path_searcher.rb +78 -0
  157. data/test/test_gem_gem_runner.rb +45 -0
  158. data/test/test_gem_gemcutter_utilities.rb +103 -0
  159. data/test/test_gem_indexer.rb +673 -0
  160. data/test/test_gem_install_update_options.rb +68 -0
  161. data/test/test_gem_installer.rb +857 -0
  162. data/test/test_gem_local_remote_options.rb +97 -0
  163. data/test/test_gem_package_tar_header.rb +130 -0
  164. data/test/test_gem_package_tar_input.rb +112 -0
  165. data/test/test_gem_package_tar_output.rb +97 -0
  166. data/test/test_gem_package_tar_reader.rb +46 -0
  167. data/test/test_gem_package_tar_reader_entry.rb +109 -0
  168. data/test/test_gem_package_tar_writer.rb +144 -0
  169. data/test/test_gem_package_task.rb +59 -0
  170. data/test/test_gem_platform.rb +264 -0
  171. data/test/test_gem_remote_fetcher.rb +740 -0
  172. data/test/test_gem_requirement.rb +292 -0
  173. data/test/test_gem_server.rb +356 -0
  174. data/test/test_gem_silent_ui.rb +113 -0
  175. data/test/test_gem_source_index.rb +461 -0
  176. data/test/test_gem_spec_fetcher.rb +410 -0
  177. data/test/test_gem_specification.rb +1291 -0
  178. data/test/test_gem_stream_ui.rb +218 -0
  179. data/test/test_gem_text.rb +43 -0
  180. data/test/test_gem_uninstaller.rb +146 -0
  181. data/test/test_gem_validator.rb +63 -0
  182. data/test/test_gem_version.rb +181 -0
  183. data/test/test_gem_version_option.rb +89 -0
  184. data/test/test_kernel.rb +59 -0
  185. metadata +413 -0
@@ -0,0 +1,65 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'rubygems'
8
+
9
+ ##
10
+ # Mixin methods for --version and --platform Gem::Command options.
11
+
12
+ module Gem::VersionOption
13
+
14
+ ##
15
+ # Add the --platform option to the option parser.
16
+
17
+ def add_platform_option(task = command, *wrap)
18
+ OptionParser.accept Gem::Platform do |value|
19
+ if value == Gem::Platform::RUBY then
20
+ value
21
+ else
22
+ Gem::Platform.new value
23
+ end
24
+ end
25
+
26
+ add_option('--platform PLATFORM', Gem::Platform,
27
+ "Specify the platform of gem to #{task}", *wrap) do
28
+ |value, options|
29
+ unless options[:added_platform] then
30
+ Gem.platforms = [Gem::Platform::RUBY]
31
+ options[:added_platform] = true
32
+ end
33
+
34
+ Gem.platforms << value unless Gem.platforms.include? value
35
+ end
36
+ end
37
+
38
+ ##
39
+ # Add the --prerelease option to the option parser.
40
+
41
+ def add_prerelease_option(*wrap)
42
+ add_option("--[no-]prerelease",
43
+ "Allow prerelease versions of a gem", *wrap) do |value, options|
44
+ options[:prerelease] = value
45
+ end
46
+ end
47
+
48
+ ##
49
+ # Add the --version option to the option parser.
50
+
51
+ def add_version_option(task = command, *wrap)
52
+ OptionParser.accept Gem::Requirement do |value|
53
+ Gem::Requirement.new value
54
+ end
55
+
56
+ add_option('-v', '--version VERSION', Gem::Requirement,
57
+ "Specify version of gem to #{task}", *wrap) do
58
+ |value, options|
59
+ options[:version] = value
60
+ options[:prerelease] = true if value.prerelease?
61
+ end
62
+ end
63
+
64
+ end
65
+
@@ -0,0 +1,10 @@
1
+ # This file allows for the running of rubygems with a nice
2
+ # command line look-and-feel: ruby -rubygems foo.rb
3
+ #--
4
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
5
+ # All rights reserved.
6
+ # See LICENSE.txt for permissions.
7
+ #++
8
+
9
+
10
+ require 'rubygems'
@@ -0,0 +1,42 @@
1
+ #--
2
+ # Copyright 2006, 2007 by Chad Fowler, Rich Kilmer, Jim Weirich, Eric Hodel
3
+ # and others.
4
+ # All rights reserved.
5
+ # See LICENSE.txt for permissions.
6
+ #++
7
+
8
+ Dir.chdir File.dirname(__FILE__)
9
+
10
+ # Make sure rubygems isn't already loaded.
11
+ if defined?(Gem)
12
+ ENV.delete 'RUBYOPT'
13
+
14
+ ENV['RUBYOPT'] = '--disable-gems' if RUBY_VERSION >= '1.9'
15
+ ENV['GEM_BOOTSTRAP'] = 'true' unless defined?(Gem::NAME)
16
+
17
+ require 'rbconfig'
18
+ config = defined?(RbConfig) ? RbConfig : Config
19
+
20
+ ruby = File.join config::CONFIG['bindir'], config::CONFIG['ruby_install_name']
21
+ ruby << config::CONFIG['EXEEXT']
22
+
23
+ exec(ruby, 'setup.rb', *ARGV)
24
+ end
25
+
26
+ $:.unshift 'lib'
27
+ require 'rubygems'
28
+ require 'rubygems/gem_runner'
29
+ require 'rubygems/exceptions'
30
+
31
+ Gem::CommandManager.instance.register_command :setup
32
+
33
+ args = ARGV.clone
34
+
35
+ args.unshift 'setup'
36
+
37
+ begin
38
+ Gem::GemRunner.new.run args
39
+ rescue Gem::SystemExitException => e
40
+ exit e.exit_code
41
+ end
42
+
@@ -0,0 +1,8 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ require 'rubygems'
8
+ Gem.use_paths("test/mock/gems")
@@ -0,0 +1,27 @@
1
+ -----BEGIN RSA PRIVATE KEY-----
2
+ MIIEpQIBAAKCAQEAz0tTOtsJuHDKAEXrQx0f6DUEzBEUTSLR1fk0iEHsY9rDCQxm
3
+ sw5Bf2UnVhdD03B4/XzIK+pat2CMQc37/vLIBuVgS7g/fzatGiM0m5rAHtycr0XU
4
+ 8Ek6zjx4iSv70OLjybY+/utHCEc838awGDMCFR21jYxgATPVwqAIyasvwbKh/Vhw
5
+ uErFPqT9G8BKTHsaX+H+ADIRH001OmWkjB6EyjF05114kNMa0+2C7daV9hoBL3md
6
+ hCt6zOGcapl/9LkGxhcNEUB/So16V1ZQldg9macGyWktyNTSfctlF+f8okAmicG3
7
+ XIwaW8UTmjFCmvDs/h1R/uKpe2IOHz87n29d2QIDAQABAoIBAQCR6n/nyg+JmTtX
8
+ /d+hGns/RTLfQpZ7xarXZ9gmoeD4WSE42VXhbIOGXXnXDAFecKl6Jb/xycGZm4if
9
+ OZPM3rEWyZeDNWrc7WvkHiwF7GSYVMqmRg2iJqoSSla+mAtl+pBFiNfHMW6K0Tp0
10
+ erOyFRW+L2+A9/MMZaRun6AP9URkn0jz2kwmMFf+6szmzVn6fPFzZDRI+hEeaDmi
11
+ LBzSrfrddrIBX+xGEoBj6RmfnKBCSUVSSxOauYjd4mVjVYxvMH4SV1hXDUS5GPl5
12
+ MbCiBb7bpNIg/8ljMoRrQiqk0XwwS7MaCqPtMhUtpSmC/zSjAfmoN7AOc/Xh69cQ
13
+ OCMNZH9BAoGBAPBlsuuU6fg0gVTKDdR12jHx03uRRt8/nPxHnpJkZCIh9XKh1LtY
14
+ bkumi9HZpp3mzDiaGg/rwfCwNckKx8NLhICLgkric6ClrKftxTu6C8tBAb5YDi6u
15
+ 74KYnV8lMY/unzBtIloPgM3uluS292POmrWZpKwhvHLD71MewzMor5HFAoGBANy/
16
+ mwsBs8i3Gzk8Twjq8effhPpE7kpxhC7bhwmjX3q41EjQWDT8M6xb1P9dRSsCIebi
17
+ kqP1yhl27dJpA8r5WqE/z89xhBvObAGRv41eXxOI0LaH2k5lJQrUeSC+51dy+BEB
18
+ T3GXD4C5ezZHQ8Wz/oL73uikrfhD+AqOZT2YbMEFAoGBAJvWEWpOGm3f+4bvhI+Z
19
+ 5lxCG4oa3wqRvj58XvsfQRovUWGCLtlTtgwsZq8enLf3iaOXohV4Czzvva4Z4u1i
20
+ 4v5BcbEBo1scixRBOn5BWKvl9C9j/a2dkX3jWQD4p2xaj69gz8f6DNFyPTb+tNhq
21
+ cjgO5YUASZ1MDrSfWIKteULRAoGAZkZv8x2KyofrmQ0UITGZerDYz4t4TA1kDMGx
22
+ QwnqhtVzpXjCJWpkFotFmDsCfPaz9mErR8PtKvcrIL1/AF+fWe5Sve3+I1P0PpXk
23
+ hf8fVdGhwbAXuRKrouTmagGI9b9Sp65PvHUcvasyJufFwqeuV8mScX87CzeSiHGI
24
+ /ozMdnECgYEAq4+losrhe0DEmiC9zVPvwRXjbSixDsSJxHfOcqIsZqhUgBiZ4TJD
25
+ SrkuukrMZib6BAD+PtCJS1TBbJyyvL3QecizhHSIh3ZnT0HnaRPatLEYmU65+3kE
26
+ kTqL4ik92bJnnWowy677sydl1lzBJDVa9ZlTs7BFSd8y/0DZaUxGg2I=
27
+ -----END RSA PRIVATE KEY-----
@@ -0,0 +1,20 @@
1
+ -----BEGIN CERTIFICATE-----
2
+ MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMREwDwYDVQQDDAhydWJ5
3
+ Z2VtczEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUxEzARBgoJkiaJk/IsZAEZFgNj
4
+ b20wHhcNMDcwODAyMDMyNTQyWhcNMDgwODAxMDMyNTQyWjBBMREwDwYDVQQDDAhy
5
+ dWJ5Z2VtczEXMBUGCgmSJomT8ixkARkWB2V4YW1wbGUxEzARBgoJkiaJk/IsZAEZ
6
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPS1M62wm4cMoA
7
+ RetDHR/oNQTMERRNItHV+TSIQexj2sMJDGazDkF/ZSdWF0PTcHj9fMgr6lq3YIxB
8
+ zfv+8sgG5WBLuD9/Nq0aIzSbmsAe3JyvRdTwSTrOPHiJK/vQ4uPJtj7+60cIRzzf
9
+ xrAYMwIVHbWNjGABM9XCoAjJqy/BsqH9WHC4SsU+pP0bwEpMexpf4f4AMhEfTTU6
10
+ ZaSMHoTKMXTnXXiQ0xrT7YLt1pX2GgEveZ2EK3rM4ZxqmX/0uQbGFw0RQH9KjXpX
11
+ VlCV2D2ZpwbJaS3I1NJ9y2UX5/yiQCaJwbdcjBpbxROaMUKa8Oz+HVH+4ql7Yg4f
12
+ Pzufb13ZAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
13
+ BBRYTAoj4cn8CWZMHFnHGQgoO5jyFTANBgkqhkiG9w0BAQUFAAOCAQEATRrJC05l
14
+ dOmx67Sy3bU+AVXkOr7B9nn2Myqo9uSIAncPoElN6aHr/Q8wOOjtok4r0JcHPe1e
15
+ eotDCZUE1Jkl13Tpv26rOfOOUHtGlyAIAtpsUGOraaJkSut4WKLr1/KckyAAEtgP
16
+ c13A0s0mEiWFRuYxIdEi54561pTT2qQBE/DUPGoYD5rUg9XYAlSovMMwG99Oca7L
17
+ cI6vCymr1bzzddExoywBNOy0fbBT62I3ICBGbH5yOVVKVmlxeo2Zp10FCj0kDrnq
18
+ OuMJSDr5I2XPYqoC+W4YSbwn55o2jGIUX1lOq2Hvj4tFgSxlnJZn0tUhBfR3gSOn
19
+ IFnrqu8PlZsLFw==
20
+ -----END CERTIFICATE-----
@@ -0,0 +1,7 @@
1
+ #--
2
+ # Copyright 2006 by Chad Fowler, Rich Kilmer, Jim Weirich and others.
3
+ # All rights reserved.
4
+ # See LICENSE.txt for permissions.
5
+ #++
6
+
7
+ raise LoadError, "no such file to load -- openssl"
File without changes
@@ -0,0 +1,92 @@
1
+ require 'rubygems'
2
+ require 'minitest/unit'
3
+ require 'test/insure_session'
4
+ require 'rubygems/format'
5
+ require 'rubygems/command_manager'
6
+
7
+ class FunctionalTest < MiniTest::Unit::TestCase
8
+
9
+ def setup
10
+ @gem_path = File.expand_path("bin/gem")
11
+ lib_path = File.expand_path("lib")
12
+ @ruby_options = "-I#{lib_path} -I."
13
+ @verbose = false
14
+ end
15
+
16
+ def test_gem_help_options
17
+ gem_nossl 'help options'
18
+ assert_match(/Usage:/, @out, @err)
19
+ assert_status
20
+ end
21
+
22
+ def test_gem_help_commands
23
+ gem_nossl 'help commands'
24
+ assert_match(/gem install/, @out)
25
+ assert_status
26
+ end
27
+
28
+ def test_gem_no_args_shows_help
29
+ gem_nossl
30
+ assert_match(/Usage:/, @out)
31
+ assert_status 1
32
+ end
33
+
34
+ # This test is disabled because of the insanely long time it takes
35
+ # to time out.
36
+ def xtest_bogus_source_hoses_up_remote_install_but_gem_command_gives_decent_error_message
37
+ @ruby_options << " -rtest/bogussources"
38
+ gem_nossl "install asdf --remote"
39
+ assert_match(/error/im, @err)
40
+ assert_status 1
41
+ end
42
+
43
+ def test_all_command_helps
44
+ mgr = Gem::CommandManager.new
45
+ mgr.command_names.each do |cmdname|
46
+ gem_nossl "help #{cmdname}"
47
+ assert_match(/Usage: gem #{cmdname}/, @out,
48
+ "should see help for #{cmdname}")
49
+ end
50
+ end
51
+
52
+ # :section: Help Methods
53
+
54
+ # Run a gem command without the SSL library.
55
+ def gem_nossl(options="")
56
+ old_options = @ruby_options.dup
57
+ @ruby_options << " -Itest/fake_certlib"
58
+ gem(options)
59
+ ensure
60
+ @ruby_options = old_options
61
+ end
62
+
63
+ # Run a gem command with the SSL library.
64
+ def gem_withssl(options="")
65
+ gem(options)
66
+ end
67
+
68
+ # Run a gem command for the functional test.
69
+ def gem(options="")
70
+ shell = Session::Shell.new
71
+ options = options + " --config-file missing_file" if options !~ /--config-file/
72
+ command = "#{Gem.ruby} #{@ruby_options} #{@gem_path} #{options}"
73
+ puts "\n\nCOMMAND: [#{command}]" if @verbose
74
+ @out, @err = shell.execute command
75
+ @status = shell.exit_status
76
+ puts "STATUS: [#{@status}]" if @verbose
77
+ puts "OUTPUT: [#{@out}]" if @verbose
78
+ puts "ERROR: [#{@err}]" if @verbose
79
+ puts "PWD: [#{Dir.pwd}]" if @verbose
80
+ shell.close
81
+ end
82
+
83
+ private
84
+
85
+ def assert_status(expected_status=0)
86
+ assert_equal expected_status, @status
87
+ end
88
+
89
+ end
90
+
91
+ MiniTest::Unit.autorun
92
+
@@ -0,0 +1,97 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'rubygems/installer'
3
+
4
+ class Gem::Installer
5
+ attr_accessor :gem_dir
6
+
7
+ attr_writer :format
8
+ attr_writer :gem_home
9
+ attr_writer :env_shebang
10
+ attr_writer :ignore_dependencies
11
+ attr_writer :format_executable
12
+ attr_writer :security_policy
13
+ attr_writer :spec
14
+ attr_writer :wrappers
15
+ end
16
+
17
+ class GemInstallerTestCase < RubyGemTestCase
18
+
19
+ def setup
20
+ super
21
+
22
+ @spec = quick_gem 'a'
23
+ @gem = File.join @tempdir, @spec.file_name
24
+
25
+ @installer = util_installer @spec, @gem, @gemhome
26
+
27
+ @user_spec = quick_gem 'b'
28
+ @user_gem = File.join @tempdir, @user_spec.file_name
29
+
30
+ @user_installer = util_installer @user_spec, @user_gem, Gem.user_dir
31
+ @user_installer.gem_dir = File.join(Gem.user_dir, 'gems',
32
+ @user_spec.full_name)
33
+ end
34
+
35
+ def util_gem_bindir(version = '2')
36
+ File.join util_gem_dir(version), "bin"
37
+ end
38
+
39
+ def util_gem_dir(version = '2')
40
+ File.join @gemhome, "gems", "a-#{version}" # HACK
41
+ end
42
+
43
+ def util_inst_bindir
44
+ File.join @gemhome, "bin"
45
+ end
46
+
47
+ def util_make_exec(version = '2', shebang = "#!/usr/bin/ruby")
48
+ @spec.executables = ["my_exec"]
49
+
50
+ FileUtils.mkdir_p util_gem_bindir(version)
51
+ exec_path = File.join util_gem_bindir(version), "my_exec"
52
+ File.open exec_path, 'w' do |f|
53
+ f.puts shebang
54
+ end
55
+ end
56
+
57
+ def util_setup_gem(ui = @ui) # HACK fix use_ui to make this automatic
58
+ @spec.files = File.join('lib', 'code.rb')
59
+ @spec.executables << 'executable'
60
+ @spec.extensions << File.join('ext', 'a', 'mkrf_conf.rb')
61
+
62
+ Dir.chdir @tempdir do
63
+ FileUtils.mkdir_p 'bin'
64
+ FileUtils.mkdir_p 'lib'
65
+ FileUtils.mkdir_p File.join('ext', 'a')
66
+ File.open File.join('bin', 'executable'), 'w' do |f| f.puts '1' end
67
+ File.open File.join('lib', 'code.rb'), 'w' do |f| f.puts '1' end
68
+ File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
69
+ f << <<-EOF
70
+ File.open 'Rakefile', 'w' do |rf| rf.puts "task :default" end
71
+ EOF
72
+ end
73
+
74
+ use_ui ui do
75
+ FileUtils.rm @gem
76
+ Gem::Builder.new(@spec).build
77
+ end
78
+ end
79
+
80
+ @installer = Gem::Installer.new @gem
81
+ end
82
+
83
+ def util_installer(spec, gem_path, gem_home)
84
+ util_build_gem spec
85
+ FileUtils.mv File.join(@gemhome, 'cache', spec.file_name),
86
+ @tempdir
87
+
88
+ installer = Gem::Installer.new gem_path
89
+ installer.gem_dir = util_gem_dir
90
+ installer.gem_home = gem_home
91
+ installer.spec = spec
92
+
93
+ installer
94
+ end
95
+
96
+ end
97
+
@@ -0,0 +1,132 @@
1
+ require File.expand_path('../gemutilities', __FILE__)
2
+ require 'rubygems/package'
3
+
4
+ class TarTestCase < RubyGemTestCase
5
+
6
+ def ASCIIZ(str, length)
7
+ str + "\0" * (length - str.length)
8
+ end
9
+
10
+ def SP(s)
11
+ s + " "
12
+ end
13
+
14
+ def SP_Z(s)
15
+ s + " \0"
16
+ end
17
+
18
+ def Z(s)
19
+ s + "\0"
20
+ end
21
+
22
+ def assert_headers_equal(expected, actual)
23
+ expected = expected.to_s unless String === expected
24
+ actual = actual.to_s unless String === actual
25
+
26
+ fields = %w[
27
+ name 100
28
+ mode 8
29
+ uid 8
30
+ gid 8
31
+ size 12
32
+ mtime 12
33
+ checksum 8
34
+ typeflag 1
35
+ linkname 100
36
+ magic 6
37
+ version 2
38
+ uname 32
39
+ gname 32
40
+ devmajor 8
41
+ devminor 8
42
+ prefix 155
43
+ ]
44
+
45
+ offset = 0
46
+
47
+ until fields.empty? do
48
+ name = fields.shift
49
+ length = fields.shift.to_i
50
+
51
+ if name == "checksum" then
52
+ chksum_off = offset
53
+ offset += length
54
+ next
55
+ end
56
+
57
+ assert_equal expected[offset, length], actual[offset, length],
58
+ "Field #{name} of the tar header differs."
59
+
60
+ offset += length
61
+ end
62
+
63
+ assert_equal expected[chksum_off, 8], actual[chksum_off, 8]
64
+ end
65
+
66
+ def calc_checksum(header)
67
+ sum = header.unpack("C*").inject{|s,a| s + a}
68
+ SP(Z(to_oct(sum, 6)))
69
+ end
70
+
71
+ def header(type, fname, dname, length, mode, checksum = nil)
72
+ checksum ||= " " * 8
73
+
74
+ arr = [ # struct tarfile_entry_posix
75
+ ASCIIZ(fname, 100), # char name[100]; ASCII + (Z unless filled)
76
+ Z(to_oct(mode, 7)), # char mode[8]; 0 padded, octal null
77
+ Z(to_oct(0, 7)), # char uid[8]; ditto
78
+ Z(to_oct(0, 7)), # char gid[8]; ditto
79
+ Z(to_oct(length, 11)), # char size[12]; 0 padded, octal, null
80
+ Z(to_oct(0, 11)), # char mtime[12]; 0 padded, octal, null
81
+ checksum, # char checksum[8]; 0 padded, octal, null, space
82
+ type, # char typeflag[1]; file: "0" dir: "5"
83
+ "\0" * 100, # char linkname[100]; ASCII + (Z unless filled)
84
+ "ustar\0", # char magic[6]; "ustar\0"
85
+ "00", # char version[2]; "00"
86
+ ASCIIZ("wheel", 32), # char uname[32]; ASCIIZ
87
+ ASCIIZ("wheel", 32), # char gname[32]; ASCIIZ
88
+ Z(to_oct(0, 7)), # char devmajor[8]; 0 padded, octal, null
89
+ Z(to_oct(0, 7)), # char devminor[8]; 0 padded, octal, null
90
+ ASCIIZ(dname, 155) # char prefix[155]; ASCII + (Z unless filled)
91
+ ]
92
+
93
+ format = "C100C8C8C8C12C12C8CC100C6C2C32C32C8C8C155"
94
+ h = if RUBY_VERSION >= "1.9" then
95
+ arr.join
96
+ else
97
+ arr = arr.join("").split(//).map{|x| x[0]}
98
+ arr.pack format
99
+ end
100
+ ret = h + "\0" * (512 - h.size)
101
+ assert_equal(512, ret.size)
102
+ ret
103
+ end
104
+
105
+ def tar_dir_header(name, prefix, mode)
106
+ h = header("5", name, prefix, 0, mode)
107
+ checksum = calc_checksum(h)
108
+ header("5", name, prefix, 0, mode, checksum)
109
+ end
110
+
111
+ def tar_file_header(fname, dname, mode, length)
112
+ h = header("0", fname, dname, length, mode)
113
+ checksum = calc_checksum(h)
114
+ header("0", fname, dname, length, mode, checksum)
115
+ end
116
+
117
+ def to_oct(n, pad_size)
118
+ "%0#{pad_size}o" % n
119
+ end
120
+
121
+ def util_entry(tar)
122
+ io = TempIO.new tar
123
+ header = Gem::Package::TarHeader.from io
124
+ entry = Gem::Package::TarReader::Entry.new header, io
125
+ end
126
+
127
+ def util_dir_entry
128
+ util_entry tar_dir_header("foo", "bar", 0)
129
+ end
130
+
131
+ end
132
+