slimgems 1.3.8

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.
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
+