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.
- data.tar.gz.sig +0 -0
- data/ChangeLog +248 -0
- data/README +2 -0
- data/Rakefile +47 -23
- data/bin/gem +9 -4
- data/bin/update_rubygems +15 -1
- data/examples/application/bin/myapp +0 -0
- data/lib/rubygems.rb +506 -373
- data/lib/rubygems/builder.rb +14 -7
- data/lib/rubygems/command.rb +9 -9
- data/lib/rubygems/command_manager.rb +1 -0
- data/lib/rubygems/commands/cleanup_command.rb +67 -69
- data/lib/rubygems/commands/environment_command.rb +16 -10
- data/lib/rubygems/commands/fetch_command.rb +7 -9
- data/lib/rubygems/commands/install_command.rb +9 -3
- data/lib/rubygems/commands/list_command.rb +2 -4
- data/lib/rubygems/commands/mirror_command.rb +1 -1
- data/lib/rubygems/commands/query_command.rb +52 -5
- data/lib/rubygems/commands/sources_command.rb +19 -10
- data/lib/rubygems/commands/specification_command.rb +10 -6
- data/lib/rubygems/commands/uninstall_command.rb +23 -6
- data/lib/rubygems/commands/unpack_command.rb +15 -3
- data/lib/rubygems/commands/update_command.rb +27 -25
- data/lib/rubygems/custom_require.rb +1 -1
- data/lib/rubygems/defaults.rb +8 -1
- data/lib/rubygems/dependency_installer.rb +72 -104
- data/lib/rubygems/digest/digest_adapter.rb +0 -0
- data/lib/rubygems/digest/md5.rb +0 -0
- data/lib/rubygems/digest/sha1.rb +0 -0
- data/lib/rubygems/digest/sha2.rb +0 -0
- data/lib/rubygems/exceptions.rb +22 -1
- data/lib/rubygems/format.rb +16 -10
- data/lib/rubygems/indexer.rb +46 -33
- data/lib/rubygems/indexer/abstract_index_builder.rb +10 -2
- data/lib/rubygems/indexer/latest_index_builder.rb +35 -0
- data/lib/rubygems/indexer/master_index_builder.rb +9 -8
- data/lib/rubygems/indexer/quick_index_builder.rb +5 -3
- data/lib/rubygems/install_update_options.rb +7 -1
- data/lib/rubygems/installer.rb +8 -5
- data/lib/rubygems/package.rb +17 -774
- data/lib/rubygems/package/f_sync_dir.rb +24 -0
- data/lib/rubygems/package/tar_header.rb +245 -0
- data/lib/rubygems/package/tar_input.rb +219 -0
- data/lib/rubygems/package/tar_output.rb +143 -0
- data/lib/rubygems/package/tar_reader.rb +86 -0
- data/lib/rubygems/package/tar_reader/entry.rb +99 -0
- data/lib/rubygems/package/tar_writer.rb +180 -0
- data/lib/rubygems/remote_fetcher.rb +131 -16
- data/lib/rubygems/requirement.rb +2 -0
- data/lib/rubygems/rubygems_version.rb +1 -1
- data/lib/rubygems/security.rb +1 -0
- data/lib/rubygems/server.rb +85 -104
- data/lib/rubygems/source_index.rb +412 -329
- data/lib/rubygems/source_info_cache.rb +232 -99
- data/lib/rubygems/source_info_cache_entry.rb +14 -4
- data/lib/rubygems/specification.rb +9 -10
- data/lib/rubygems/timer.rb +0 -0
- data/lib/rubygems/uninstaller.rb +56 -32
- data/lib/rubygems/user_interaction.rb +4 -10
- data/lib/rubygems/validator.rb +0 -0
- data/scripts/gemdoc.rb +0 -0
- data/scripts/specdoc.rb +0 -0
- data/setup.rb +56 -19
- data/test/gem_installer_test_case.rb +86 -0
- data/test/gem_installer_test_case.rbc +0 -0
- data/test/gem_package_tar_test_case.rb +146 -0
- data/test/gem_package_tar_test_case.rbc +0 -0
- data/test/gemutilities.rb +123 -38
- data/test/gemutilities.rbc +0 -0
- data/test/mockgemui.rb +5 -13
- data/test/mockgemui.rbc +0 -0
- data/test/private_key.pem +27 -0
- data/test/public_cert.pem +20 -0
- data/test/simple_gem.rbc +0 -0
- data/test/test_config.rbc +0 -0
- data/test/test_gem.rb +46 -4
- data/test/test_gem.rbc +0 -0
- data/test/test_gem_builder.rbc +0 -0
- data/test/test_gem_command.rbc +0 -0
- data/test/test_gem_command_manager.rb +4 -2
- data/test/test_gem_command_manager.rbc +0 -0
- data/test/test_gem_commands_build_command.rbc +0 -0
- data/test/test_gem_commands_cert_command.rb +5 -1
- data/test/test_gem_commands_cert_command.rbc +0 -0
- data/test/test_gem_commands_check_command.rbc +0 -0
- data/test/test_gem_commands_contents_command.rbc +0 -0
- data/test/test_gem_commands_dependency_command.rbc +0 -0
- data/test/test_gem_commands_environment_command.rb +17 -1
- data/test/test_gem_commands_environment_command.rbc +0 -0
- data/test/test_gem_commands_fetch_command.rb +6 -5
- data/test/test_gem_commands_fetch_command.rbc +0 -0
- data/test/test_gem_commands_generate_index_command.rbc +0 -0
- data/test/test_gem_commands_install_command.rb +36 -28
- data/test/test_gem_commands_install_command.rbc +0 -0
- data/test/test_gem_commands_mirror_command.rbc +0 -0
- data/test/test_gem_commands_pristine_command.rbc +0 -0
- data/test/test_gem_commands_query_command.rb +143 -19
- data/test/test_gem_commands_query_command.rbc +0 -0
- data/test/test_gem_commands_server_command.rb +1 -1
- data/test/test_gem_commands_server_command.rbc +0 -0
- data/test/test_gem_commands_sources_command.rb +67 -9
- data/test/test_gem_commands_sources_command.rbc +0 -0
- data/test/test_gem_commands_specification_command.rb +3 -2
- data/test/test_gem_commands_specification_command.rbc +0 -0
- data/test/test_gem_commands_unpack_command.rb +46 -4
- data/test/test_gem_commands_unpack_command.rbc +0 -0
- data/test/test_gem_commands_update_command.rb +174 -0
- data/test/test_gem_commands_update_command.rbc +0 -0
- data/test/test_gem_config_file.rbc +0 -0
- data/test/test_gem_dependency.rbc +0 -0
- data/test/test_gem_dependency_installer.rb +172 -187
- data/test/test_gem_dependency_installer.rbc +0 -0
- data/test/test_gem_dependency_list.rbc +0 -0
- data/test/test_gem_digest.rb +0 -0
- data/test/test_gem_digest.rbc +0 -0
- data/test/test_gem_doc_manager.rbc +0 -0
- data/test/test_gem_ext_configure_builder.rb +9 -6
- data/test/test_gem_ext_configure_builder.rbc +0 -0
- data/test/test_gem_ext_ext_conf_builder.rbc +0 -0
- data/test/test_gem_ext_rake_builder.rbc +0 -0
- data/test/test_gem_format.rb +1 -1
- data/test/test_gem_format.rbc +0 -0
- data/test/test_gem_gem_path_searcher.rbc +0 -0
- data/test/test_gem_gem_runner.rbc +0 -0
- data/test/test_gem_indexer.rb +7 -2
- data/test/test_gem_indexer.rbc +0 -0
- data/test/test_gem_install_update_options.rbc +0 -0
- data/test/test_gem_installer.rb +5 -84
- data/test/test_gem_installer.rbc +0 -0
- data/test/test_gem_local_remote_options.rbc +0 -0
- data/test/test_gem_outdated_command.rbc +0 -0
- data/test/test_gem_package_tar_header.rb +137 -0
- data/test/test_gem_package_tar_header.rbc +0 -0
- data/test/test_gem_package_tar_input.rb +119 -0
- data/test/test_gem_package_tar_input.rbc +0 -0
- data/test/test_gem_package_tar_output.rb +104 -0
- data/test/test_gem_package_tar_output.rbc +0 -0
- data/test/test_gem_package_tar_reader.rb +53 -0
- data/test/test_gem_package_tar_reader.rbc +0 -0
- data/test/test_gem_package_tar_reader_entry.rb +116 -0
- data/test/test_gem_package_tar_reader_entry.rbc +0 -0
- data/test/test_gem_package_tar_writer.rb +151 -0
- data/test/test_gem_package_tar_writer.rbc +0 -0
- data/test/test_gem_platform.rbc +0 -0
- data/test/test_gem_remote_fetcher.rb +189 -17
- data/test/test_gem_remote_fetcher.rbc +0 -0
- data/test/test_gem_requirement.rbc +0 -0
- data/test/test_gem_server.rb +13 -12
- data/test/test_gem_server.rbc +0 -0
- data/test/test_gem_source_index.rb +305 -56
- data/test/test_gem_source_index.rbc +0 -0
- data/test/test_gem_source_info_cache.rb +179 -53
- data/test/test_gem_source_info_cache.rbc +0 -0
- data/test/test_gem_source_info_cache_entry.rb +41 -10
- data/test/test_gem_source_info_cache_entry.rbc +0 -0
- data/test/test_gem_specification.rb +7 -7
- data/test/test_gem_specification.rbc +0 -0
- data/test/test_gem_stream_ui.rbc +0 -0
- data/test/test_gem_uninstaller.rb +43 -0
- data/test/test_gem_uninstaller.rbc +0 -0
- data/test/test_gem_validator.rbc +0 -0
- data/test/test_gem_version.rb +1 -1
- data/test/test_gem_version.rbc +0 -0
- data/test/test_gem_version_option.rbc +0 -0
- data/test/test_kernel.rb +1 -0
- data/test/test_kernel.rbc +0 -0
- metadata +85 -8
- metadata.gz.sig +0 -0
- data/lib/rubygems/gem_open_uri.rb +0 -7
- data/lib/rubygems/open-uri.rb +0 -773
- data/test/test_open_uri.rb +0 -13
- data/test/test_package.rb +0 -608
Binary file
|
Binary file
|
data/test/test_gem_digest.rb
CHANGED
File without changes
|
Binary file
|
Binary file
|
@@ -47,16 +47,19 @@ class TestGemExtConfigureBuilder < RubyGemTestCase
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
|
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
|
-
|
53
|
-
.*?:
|
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 "
|
59
|
-
assert_match %r
|
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
|
|
Binary file
|
Binary file
|
Binary file
|
data/test/test_gem_format.rb
CHANGED
Binary file
|
Binary file
|
Binary file
|
data/test/test_gem_indexer.rb
CHANGED
@@ -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
|
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
|
Binary file
|
data/test/test_gem_installer.rb
CHANGED
@@ -4,63 +4,10 @@
|
|
4
4
|
# See LICENSE.txt for permissions.
|
5
5
|
#++
|
6
6
|
|
7
|
-
require
|
8
|
-
|
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
|
-
|
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.
|
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
|
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
|
|
Binary file
|
Binary file
|
Binary file
|
@@ -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
|
+
|
Binary file
|
@@ -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
|
+
|