rubygems-update 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rubygems-update might be problematic. Click here for more details.

Files changed (172) hide show
  1. data.tar.gz.sig +0 -0
  2. data/ChangeLog +248 -0
  3. data/README +2 -0
  4. data/Rakefile +47 -23
  5. data/bin/gem +9 -4
  6. data/bin/update_rubygems +15 -1
  7. data/examples/application/bin/myapp +0 -0
  8. data/lib/rubygems.rb +506 -373
  9. data/lib/rubygems/builder.rb +14 -7
  10. data/lib/rubygems/command.rb +9 -9
  11. data/lib/rubygems/command_manager.rb +1 -0
  12. data/lib/rubygems/commands/cleanup_command.rb +67 -69
  13. data/lib/rubygems/commands/environment_command.rb +16 -10
  14. data/lib/rubygems/commands/fetch_command.rb +7 -9
  15. data/lib/rubygems/commands/install_command.rb +9 -3
  16. data/lib/rubygems/commands/list_command.rb +2 -4
  17. data/lib/rubygems/commands/mirror_command.rb +1 -1
  18. data/lib/rubygems/commands/query_command.rb +52 -5
  19. data/lib/rubygems/commands/sources_command.rb +19 -10
  20. data/lib/rubygems/commands/specification_command.rb +10 -6
  21. data/lib/rubygems/commands/uninstall_command.rb +23 -6
  22. data/lib/rubygems/commands/unpack_command.rb +15 -3
  23. data/lib/rubygems/commands/update_command.rb +27 -25
  24. data/lib/rubygems/custom_require.rb +1 -1
  25. data/lib/rubygems/defaults.rb +8 -1
  26. data/lib/rubygems/dependency_installer.rb +72 -104
  27. data/lib/rubygems/digest/digest_adapter.rb +0 -0
  28. data/lib/rubygems/digest/md5.rb +0 -0
  29. data/lib/rubygems/digest/sha1.rb +0 -0
  30. data/lib/rubygems/digest/sha2.rb +0 -0
  31. data/lib/rubygems/exceptions.rb +22 -1
  32. data/lib/rubygems/format.rb +16 -10
  33. data/lib/rubygems/indexer.rb +46 -33
  34. data/lib/rubygems/indexer/abstract_index_builder.rb +10 -2
  35. data/lib/rubygems/indexer/latest_index_builder.rb +35 -0
  36. data/lib/rubygems/indexer/master_index_builder.rb +9 -8
  37. data/lib/rubygems/indexer/quick_index_builder.rb +5 -3
  38. data/lib/rubygems/install_update_options.rb +7 -1
  39. data/lib/rubygems/installer.rb +8 -5
  40. data/lib/rubygems/package.rb +17 -774
  41. data/lib/rubygems/package/f_sync_dir.rb +24 -0
  42. data/lib/rubygems/package/tar_header.rb +245 -0
  43. data/lib/rubygems/package/tar_input.rb +219 -0
  44. data/lib/rubygems/package/tar_output.rb +143 -0
  45. data/lib/rubygems/package/tar_reader.rb +86 -0
  46. data/lib/rubygems/package/tar_reader/entry.rb +99 -0
  47. data/lib/rubygems/package/tar_writer.rb +180 -0
  48. data/lib/rubygems/remote_fetcher.rb +131 -16
  49. data/lib/rubygems/requirement.rb +2 -0
  50. data/lib/rubygems/rubygems_version.rb +1 -1
  51. data/lib/rubygems/security.rb +1 -0
  52. data/lib/rubygems/server.rb +85 -104
  53. data/lib/rubygems/source_index.rb +412 -329
  54. data/lib/rubygems/source_info_cache.rb +232 -99
  55. data/lib/rubygems/source_info_cache_entry.rb +14 -4
  56. data/lib/rubygems/specification.rb +9 -10
  57. data/lib/rubygems/timer.rb +0 -0
  58. data/lib/rubygems/uninstaller.rb +56 -32
  59. data/lib/rubygems/user_interaction.rb +4 -10
  60. data/lib/rubygems/validator.rb +0 -0
  61. data/scripts/gemdoc.rb +0 -0
  62. data/scripts/specdoc.rb +0 -0
  63. data/setup.rb +56 -19
  64. data/test/gem_installer_test_case.rb +86 -0
  65. data/test/gem_installer_test_case.rbc +0 -0
  66. data/test/gem_package_tar_test_case.rb +146 -0
  67. data/test/gem_package_tar_test_case.rbc +0 -0
  68. data/test/gemutilities.rb +123 -38
  69. data/test/gemutilities.rbc +0 -0
  70. data/test/mockgemui.rb +5 -13
  71. data/test/mockgemui.rbc +0 -0
  72. data/test/private_key.pem +27 -0
  73. data/test/public_cert.pem +20 -0
  74. data/test/simple_gem.rbc +0 -0
  75. data/test/test_config.rbc +0 -0
  76. data/test/test_gem.rb +46 -4
  77. data/test/test_gem.rbc +0 -0
  78. data/test/test_gem_builder.rbc +0 -0
  79. data/test/test_gem_command.rbc +0 -0
  80. data/test/test_gem_command_manager.rb +4 -2
  81. data/test/test_gem_command_manager.rbc +0 -0
  82. data/test/test_gem_commands_build_command.rbc +0 -0
  83. data/test/test_gem_commands_cert_command.rb +5 -1
  84. data/test/test_gem_commands_cert_command.rbc +0 -0
  85. data/test/test_gem_commands_check_command.rbc +0 -0
  86. data/test/test_gem_commands_contents_command.rbc +0 -0
  87. data/test/test_gem_commands_dependency_command.rbc +0 -0
  88. data/test/test_gem_commands_environment_command.rb +17 -1
  89. data/test/test_gem_commands_environment_command.rbc +0 -0
  90. data/test/test_gem_commands_fetch_command.rb +6 -5
  91. data/test/test_gem_commands_fetch_command.rbc +0 -0
  92. data/test/test_gem_commands_generate_index_command.rbc +0 -0
  93. data/test/test_gem_commands_install_command.rb +36 -28
  94. data/test/test_gem_commands_install_command.rbc +0 -0
  95. data/test/test_gem_commands_mirror_command.rbc +0 -0
  96. data/test/test_gem_commands_pristine_command.rbc +0 -0
  97. data/test/test_gem_commands_query_command.rb +143 -19
  98. data/test/test_gem_commands_query_command.rbc +0 -0
  99. data/test/test_gem_commands_server_command.rb +1 -1
  100. data/test/test_gem_commands_server_command.rbc +0 -0
  101. data/test/test_gem_commands_sources_command.rb +67 -9
  102. data/test/test_gem_commands_sources_command.rbc +0 -0
  103. data/test/test_gem_commands_specification_command.rb +3 -2
  104. data/test/test_gem_commands_specification_command.rbc +0 -0
  105. data/test/test_gem_commands_unpack_command.rb +46 -4
  106. data/test/test_gem_commands_unpack_command.rbc +0 -0
  107. data/test/test_gem_commands_update_command.rb +174 -0
  108. data/test/test_gem_commands_update_command.rbc +0 -0
  109. data/test/test_gem_config_file.rbc +0 -0
  110. data/test/test_gem_dependency.rbc +0 -0
  111. data/test/test_gem_dependency_installer.rb +172 -187
  112. data/test/test_gem_dependency_installer.rbc +0 -0
  113. data/test/test_gem_dependency_list.rbc +0 -0
  114. data/test/test_gem_digest.rb +0 -0
  115. data/test/test_gem_digest.rbc +0 -0
  116. data/test/test_gem_doc_manager.rbc +0 -0
  117. data/test/test_gem_ext_configure_builder.rb +9 -6
  118. data/test/test_gem_ext_configure_builder.rbc +0 -0
  119. data/test/test_gem_ext_ext_conf_builder.rbc +0 -0
  120. data/test/test_gem_ext_rake_builder.rbc +0 -0
  121. data/test/test_gem_format.rb +1 -1
  122. data/test/test_gem_format.rbc +0 -0
  123. data/test/test_gem_gem_path_searcher.rbc +0 -0
  124. data/test/test_gem_gem_runner.rbc +0 -0
  125. data/test/test_gem_indexer.rb +7 -2
  126. data/test/test_gem_indexer.rbc +0 -0
  127. data/test/test_gem_install_update_options.rbc +0 -0
  128. data/test/test_gem_installer.rb +5 -84
  129. data/test/test_gem_installer.rbc +0 -0
  130. data/test/test_gem_local_remote_options.rbc +0 -0
  131. data/test/test_gem_outdated_command.rbc +0 -0
  132. data/test/test_gem_package_tar_header.rb +137 -0
  133. data/test/test_gem_package_tar_header.rbc +0 -0
  134. data/test/test_gem_package_tar_input.rb +119 -0
  135. data/test/test_gem_package_tar_input.rbc +0 -0
  136. data/test/test_gem_package_tar_output.rb +104 -0
  137. data/test/test_gem_package_tar_output.rbc +0 -0
  138. data/test/test_gem_package_tar_reader.rb +53 -0
  139. data/test/test_gem_package_tar_reader.rbc +0 -0
  140. data/test/test_gem_package_tar_reader_entry.rb +116 -0
  141. data/test/test_gem_package_tar_reader_entry.rbc +0 -0
  142. data/test/test_gem_package_tar_writer.rb +151 -0
  143. data/test/test_gem_package_tar_writer.rbc +0 -0
  144. data/test/test_gem_platform.rbc +0 -0
  145. data/test/test_gem_remote_fetcher.rb +189 -17
  146. data/test/test_gem_remote_fetcher.rbc +0 -0
  147. data/test/test_gem_requirement.rbc +0 -0
  148. data/test/test_gem_server.rb +13 -12
  149. data/test/test_gem_server.rbc +0 -0
  150. data/test/test_gem_source_index.rb +305 -56
  151. data/test/test_gem_source_index.rbc +0 -0
  152. data/test/test_gem_source_info_cache.rb +179 -53
  153. data/test/test_gem_source_info_cache.rbc +0 -0
  154. data/test/test_gem_source_info_cache_entry.rb +41 -10
  155. data/test/test_gem_source_info_cache_entry.rbc +0 -0
  156. data/test/test_gem_specification.rb +7 -7
  157. data/test/test_gem_specification.rbc +0 -0
  158. data/test/test_gem_stream_ui.rbc +0 -0
  159. data/test/test_gem_uninstaller.rb +43 -0
  160. data/test/test_gem_uninstaller.rbc +0 -0
  161. data/test/test_gem_validator.rbc +0 -0
  162. data/test/test_gem_version.rb +1 -1
  163. data/test/test_gem_version.rbc +0 -0
  164. data/test/test_gem_version_option.rbc +0 -0
  165. data/test/test_kernel.rb +1 -0
  166. data/test/test_kernel.rbc +0 -0
  167. metadata +85 -8
  168. metadata.gz.sig +0 -0
  169. data/lib/rubygems/gem_open_uri.rb +0 -7
  170. data/lib/rubygems/open-uri.rb +0 -773
  171. data/test/test_open_uri.rb +0 -13
  172. data/test/test_package.rb +0 -608
File without changes
Binary file
@@ -47,16 +47,19 @@ class TestGemExtConfigureBuilder < RubyGemTestCase
47
47
  end
48
48
  end
49
49
 
50
- expected = %r|configure failed:
50
+ shell_error_msg = %r{(\./configure: No such file or directory)|(Can't open \./configure)}
51
+ sh_prefix_configure = "sh ./configure --prefix="
52
+
53
+ expected = %r(configure failed:
51
54
 
52
- sh \./configure --prefix=#{Regexp.escape @dest_path}
53
- .*?: \./configure: No such file or directory
54
- |
55
+ #{Regexp.escape sh_prefix_configure}#{Regexp.escape @dest_path}
56
+ .*?: #{shell_error_msg}
57
+ )
55
58
 
56
59
  assert_match expected, error.message
57
60
 
58
- assert_equal "sh ./configure --prefix=#{@dest_path}", output.shift
59
- assert_match %r|\./configure: No such file or directory\n|, output.shift
61
+ assert_equal "#{sh_prefix_configure}#{@dest_path}", output.shift
62
+ assert_match %r(#{shell_error_msg}\n), output.shift
60
63
  assert_equal true, output.empty?
61
64
  end
62
65
 
@@ -22,7 +22,7 @@ class TestGemFormat < RubyGemTestCase
22
22
 
23
23
  gems = Dir[File.join(@gemhome, 'cache', '*.gem')]
24
24
 
25
- names = [@a1, @a2, @b2, @c1_2, @pl1].map do |spec|
25
+ names = [@a1, @a2, @a_evil9, @b2, @c1_2, @pl1].map do |spec|
26
26
  spec.original_name
27
27
  end
28
28
 
Binary file
@@ -53,6 +53,11 @@ class TestGemIndexer < RubyGemTestCase
53
53
  assert_indexed quickdir, "index"
54
54
  assert_indexed quickdir, "index.rz"
55
55
 
56
+ assert_indexed quickdir, "latest_index"
57
+ assert_indexed quickdir, "latest_index.rz"
58
+
59
+ assert_no_match %r|a-1|, File.read(File.join(quickdir, 'latest_index'))
60
+
56
61
  assert_indexed quickdir, "#{@a1.full_name}.gemspec.rz"
57
62
  assert_indexed quickdir, "#{@a2.full_name}.gemspec.rz"
58
63
  assert_indexed quickdir, "#{@b2.full_name}.gemspec.rz"
@@ -74,8 +79,8 @@ class TestGemIndexer < RubyGemTestCase
74
79
  end
75
80
 
76
81
  expected = <<-EOF
77
- Generating index for 5 gems in #{@tempdir}
78
- .....
82
+ Generating index for 6 gems in #{@tempdir}
83
+ ......
79
84
  Loaded all gems
80
85
  Generating master indexes (this may take a while)
81
86
  EOF
Binary file
@@ -4,63 +4,10 @@
4
4
  # See LICENSE.txt for permissions.
5
5
  #++
6
6
 
7
- require 'test/unit'
8
- require File.join(File.expand_path(File.dirname(__FILE__)), 'gemutilities')
9
- require 'rubygems/installer'
10
-
11
- class Gem::Installer
12
- attr_accessor :gem_dir
13
-
14
- attr_writer :format
15
- attr_writer :gem_home
16
- attr_writer :env_shebang
17
- attr_writer :ignore_dependencies
18
- attr_writer :format_executable
19
- attr_writer :security_policy
20
- attr_writer :spec
21
- attr_writer :wrappers
22
- end
23
-
24
- class TestGemInstaller < RubyGemTestCase
25
-
26
- def setup
27
- super
28
-
29
- @spec = quick_gem "a"
30
- @gem = File.join @tempdir, "#{@spec.full_name}.gem"
31
-
32
- util_build_gem @spec
33
- FileUtils.mv File.join(@gemhome, 'cache', "#{@spec.full_name}.gem"),
34
- @tempdir
35
-
36
- @installer = Gem::Installer.new @gem
37
- @installer.gem_dir = util_gem_dir
38
- @installer.gem_home = @gemhome
39
- @installer.spec = @spec
40
- end
41
-
42
- def util_gem_dir(version = '2')
43
- File.join @gemhome, "gems", "a-#{version}" # HACK
44
- end
45
-
46
- def util_gem_bindir(version = '2')
47
- File.join util_gem_dir(version), "bin"
48
- end
7
+ require File.join(File.expand_path(File.dirname(__FILE__)),
8
+ 'gem_installer_test_case')
49
9
 
50
- def util_inst_bindir
51
- File.join @gemhome, "bin"
52
- end
53
-
54
- def util_make_exec(version = '2', shebang = "#!/usr/bin/ruby")
55
- @spec.executables = ["my_exec"]
56
-
57
- FileUtils.mkdir_p util_gem_bindir(version)
58
- exec_file = @installer.formatted_program_filename "my_exec"
59
- exec_path = File.join util_gem_bindir(version), exec_file
60
- File.open exec_path, 'w' do |f|
61
- f.puts shebang
62
- end
63
- end
10
+ class TestGemInstaller < GemInstallerTestCase
64
11
 
65
12
  def test_app_script_text
66
13
  util_make_exec '2', ''
@@ -162,7 +109,7 @@ load 'my_exec'
162
109
  @installer.gem_dir = '/nonexistent'
163
110
  expanded_gem_dir = @installer.send(:expand_and_validate_gem_dir)
164
111
  if win_platform?
165
- expected = File.join(Config::CONFIG['bindir'][0..2], 'nonexistent').downcase
112
+ expected = File.expand_path('/nonexistent').downcase
166
113
  expanded_gem_dir = expanded_gem_dir.downcase
167
114
  else
168
115
  expected = '/nonexistent'
@@ -768,7 +715,7 @@ load 'my_exec'
768
715
  @installer.env_shebang = true
769
716
 
770
717
  shebang = @installer.shebang 'my_exec'
771
- assert_equal "#!/usr/bin/env ruby", shebang
718
+ assert_equal "#!/usr/bin/env #{Gem::ConfigMap[:RUBY_INSTALL_NAME]}", shebang
772
719
  end
773
720
 
774
721
  def test_shebang_nested
@@ -855,31 +802,5 @@ load 'my_exec'
855
802
  File.join @gemhome, 'cache', "#{spec.full_name}.gem"
856
803
  end
857
804
 
858
- def util_setup_gem
859
- @spec.files = File.join('lib', 'code.rb')
860
- @spec.executables << 'executable'
861
- @spec.extensions << File.join('ext', 'a', 'mkrf_conf.rb')
862
-
863
- Dir.chdir @tempdir do
864
- FileUtils.mkdir_p 'bin'
865
- FileUtils.mkdir_p 'lib'
866
- FileUtils.mkdir_p File.join('ext', 'a')
867
- File.open File.join('bin', 'executable'), 'w' do |f| f.puts '1' end
868
- File.open File.join('lib', 'code.rb'), 'w' do |f| f.puts '1' end
869
- File.open File.join('ext', 'a', 'mkrf_conf.rb'), 'w' do |f|
870
- f << <<-EOF
871
- File.open 'Rakefile', 'w' do |rf| rf.puts "task :default" end
872
- EOF
873
- end
874
-
875
- use_ui @ui do
876
- FileUtils.rm @gem
877
- Gem::Builder.new(@spec).build
878
- end
879
- end
880
-
881
- @installer = Gem::Installer.new @gem
882
- end
883
-
884
805
  end
885
806
 
@@ -0,0 +1,137 @@
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 File.join(File.expand_path(File.dirname(__FILE__)),
8
+ 'gem_package_tar_test_case')
9
+ require 'rubygems/package'
10
+
11
+ class TestGemPackageTarHeader < TarTestCase
12
+
13
+ def setup
14
+ super
15
+
16
+ header = {
17
+ :name => 'x',
18
+ :mode => 0644,
19
+ :uid => 1000,
20
+ :gid => 10000,
21
+ :size => 100,
22
+ :mtime => 12345,
23
+ :typeflag => '0',
24
+ :linkname => 'link',
25
+ :uname => 'user',
26
+ :gname => 'group',
27
+ :devmajor => 1,
28
+ :devminor => 2,
29
+ :prefix => 'y',
30
+ }
31
+
32
+ @tar_header = Gem::Package::TarHeader.new header
33
+ end
34
+
35
+ def test_self_from
36
+ io = TempIO.new @tar_header.to_s
37
+
38
+ new_header = Gem::Package::TarHeader.from io
39
+
40
+ assert_headers_equal @tar_header, new_header
41
+ end
42
+
43
+ def test_initialize
44
+ assert_equal '', @tar_header.checksum, 'checksum'
45
+ assert_equal 1, @tar_header.devmajor, 'devmajor'
46
+ assert_equal 2, @tar_header.devminor, 'devminor'
47
+ assert_equal 10000, @tar_header.gid, 'gid'
48
+ assert_equal 'group', @tar_header.gname, 'gname'
49
+ assert_equal 'link', @tar_header.linkname, 'linkname'
50
+ assert_equal 'ustar', @tar_header.magic, 'magic'
51
+ assert_equal 0644, @tar_header.mode, 'mode'
52
+ assert_equal 12345, @tar_header.mtime, 'mtime'
53
+ assert_equal 'x', @tar_header.name, 'name'
54
+ assert_equal 'y', @tar_header.prefix, 'prefix'
55
+ assert_equal 100, @tar_header.size, 'size'
56
+ assert_equal '0', @tar_header.typeflag, 'typeflag'
57
+ assert_equal 1000, @tar_header.uid, 'uid'
58
+ assert_equal 'user', @tar_header.uname, 'uname'
59
+ assert_equal '00', @tar_header.version, 'version'
60
+
61
+ assert !@tar_header.empty?, 'empty'
62
+ end
63
+
64
+ def test_initialize_bad
65
+ assert_raises ArgumentError do
66
+ Gem::Package::TarHeader.new :name => '', :size => '', :mode => ''
67
+ end
68
+
69
+ assert_raises ArgumentError do
70
+ Gem::Package::TarHeader.new :name => '', :size => '', :prefix => ''
71
+ end
72
+
73
+ assert_raises ArgumentError do
74
+ Gem::Package::TarHeader.new :name => '', :prefix => '', :mode => ''
75
+ end
76
+
77
+ assert_raises ArgumentError do
78
+ Gem::Package::TarHeader.new :prefix => '', :size => '', :mode => ''
79
+ end
80
+ end
81
+
82
+ def test_empty_eh
83
+ assert !@tar_header.empty?
84
+
85
+ @tar_header = Gem::Package::TarHeader.new :name => 'x', :prefix => '',
86
+ :mode => 0, :size => 0,
87
+ :empty => true
88
+
89
+ assert @tar_header.empty?
90
+ end
91
+
92
+ def test_equals2
93
+ assert_equal @tar_header, @tar_header
94
+ assert_equal @tar_header, @tar_header.dup
95
+ end
96
+
97
+ def test_to_s
98
+ expected = <<-EOF.split("\n").join
99
+ x\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
100
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
101
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
102
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
103
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
104
+ \000\000\000\0000000644\0000001750\0000023420\00000000000144\00000000030071
105
+ \000012467\000 0link\000\000\000\000\000\000\000\000\000\000\000\000\000\000
106
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
107
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
108
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
109
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
110
+ \000\000\000\000\000\000ustar\00000user\000\000\000\000\000\000\000\000\000
111
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
112
+ group\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
113
+ \000\000\000\000\000\000\000\000\0000000001\0000000002\000y\000\000\000\000
114
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
115
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
116
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
117
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
118
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
119
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
120
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
121
+ \000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000\000
122
+ \000\000\000\000\000\000\000\000\000\000
123
+ EOF
124
+
125
+ assert_headers_equal expected, @tar_header
126
+ end
127
+
128
+ def test_update_checksum
129
+ assert_equal '', @tar_header.checksum
130
+
131
+ @tar_header.update_checksum
132
+
133
+ assert_equal '012467', @tar_header.checksum
134
+ end
135
+
136
+ end
137
+
@@ -0,0 +1,119 @@
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 File.join(File.expand_path(File.dirname(__FILE__)),
8
+ 'gem_package_tar_test_case')
9
+ require 'rubygems/package/tar_input'
10
+
11
+ class TestGemPackageTarInput < TarTestCase
12
+
13
+ # Sometimes the setgid bit doesn't take. Don't know if this is a problem on
14
+ # all systems, or just some. But for now, we will ignore it in the tests.
15
+ SETGID_BIT = 02000
16
+
17
+ def setup
18
+ super
19
+
20
+ inner_tar = tar_file_header("bla", "", 0612, 10)
21
+ inner_tar += "0123456789" + "\0" * 502
22
+ inner_tar += tar_file_header("foo", "", 0636, 5)
23
+ inner_tar += "01234" + "\0" * 507
24
+ inner_tar += tar_dir_header("__dir__", "", 0600)
25
+ inner_tar += "\0" * 1024
26
+ str = TempIO.new
27
+
28
+ begin
29
+ os = Zlib::GzipWriter.new str
30
+ os.write inner_tar
31
+ ensure
32
+ os.finish
33
+ end
34
+
35
+ str.rewind
36
+
37
+ @file = File.join @tempdir, 'bla.tar'
38
+
39
+ File.open @file, 'wb' do |f|
40
+ f.write tar_file_header("data.tar.gz", "", 0644, str.string.size)
41
+ f.write str.string
42
+ f.write "\0" * ((512 - (str.string.size % 512)) % 512 )
43
+
44
+ @spec = Gem::Specification.new do |spec|
45
+ spec.author = "Mauricio :)"
46
+ end
47
+
48
+ meta = @spec.to_yaml
49
+
50
+ f.write tar_file_header("metadata", "", 0644, meta.size)
51
+ f.write meta + "\0" * (1024 - meta.size)
52
+ f.write "\0" * 1024
53
+ end
54
+
55
+ @entry_names = %w{bla foo __dir__}
56
+ @entry_sizes = [10, 5, 0]
57
+ #FIXME: are these modes system dependent?
58
+ @entry_modes = [0100612, 0100636, 040600]
59
+ @entry_files = %W[#{@tempdir}/bla #{@tempdir}/foo]
60
+ @entry_contents = %w[0123456789 01234]
61
+ end
62
+
63
+ def test_each_works
64
+ open @file, 'rb' do |io|
65
+ Gem::Package::TarInput.open io do |tar_input|
66
+ count = 0
67
+
68
+ tar_input.each_with_index do |entry, i|
69
+ count = i
70
+
71
+ assert_kind_of Gem::Package::TarReader::Entry, entry
72
+ assert_equal @entry_names[i], entry.header.name
73
+ assert_equal @entry_sizes[i], entry.header.size
74
+ end
75
+
76
+ assert_equal 2, count
77
+
78
+ assert_equal @spec, tar_input.metadata
79
+ end
80
+ end
81
+ end
82
+
83
+ def test_extract_entry_works
84
+ open @file, 'rb' do |io|
85
+ Gem::Package::TarInput.open io do |tar_input|
86
+ assert_equal @spec, tar_input.metadata
87
+
88
+ count = 0
89
+
90
+ tar_input.each_with_index do |entry, i|
91
+ count = i
92
+ tar_input.extract_entry @tempdir, entry
93
+ name = File.join @tempdir, entry.header.name
94
+
95
+ if entry.directory?
96
+ assert File.dir?(name)
97
+ else
98
+ assert File.file?(name)
99
+ assert_equal @entry_sizes[i], File.stat(name).size
100
+ #FIXME: win32? !!
101
+ end
102
+
103
+ unless Gem.win_platform? then
104
+ assert_equal @entry_modes[i], File.stat(name).mode & (~SETGID_BIT)
105
+ end
106
+ end
107
+
108
+ assert_equal 2, count
109
+ end
110
+ end
111
+
112
+ @entry_files.each_with_index do |x, i|
113
+ assert File.file?(x)
114
+ assert_equal @entry_contents[i], File.read_b(x)
115
+ end
116
+ end
117
+
118
+ end
119
+