rubygems-update 1.8.30 → 2.0.0.preview2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of rubygems-update might be problematic. Click here for more details.
- checksums.yaml +6 -6
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +3 -0
- data/.autotest +6 -3
- data/History.txt +137 -63
- data/LICENSE.txt +1 -5
- data/Manifest.txt +69 -32
- data/README.rdoc +11 -9
- data/Rakefile +24 -38
- data/bin/gem +0 -9
- data/bin/update_rubygems +1 -0
- data/lib/rubygems.rb +193 -405
- data/lib/rubygems/available_set.rb +95 -0
- data/lib/rubygems/command.rb +88 -45
- data/lib/rubygems/command_manager.rb +67 -40
- data/lib/rubygems/commands/build_command.rb +5 -23
- data/lib/rubygems/commands/cert_command.rb +199 -57
- data/lib/rubygems/commands/check_command.rb +14 -39
- data/lib/rubygems/commands/cleanup_command.rb +9 -1
- data/lib/rubygems/commands/contents_command.rb +30 -12
- data/lib/rubygems/commands/dependency_command.rb +3 -8
- data/lib/rubygems/commands/environment_command.rb +13 -8
- data/lib/rubygems/commands/fetch_command.rb +3 -16
- data/lib/rubygems/commands/generate_index_command.rb +7 -47
- data/lib/rubygems/commands/help_command.rb +1 -1
- data/lib/rubygems/commands/install_command.rb +69 -36
- data/lib/rubygems/commands/list_command.rb +6 -4
- data/lib/rubygems/commands/lock_command.rb +1 -1
- data/lib/rubygems/commands/mirror_command.rb +17 -0
- data/lib/rubygems/commands/outdated_command.rb +6 -3
- data/lib/rubygems/commands/owner_command.rb +13 -5
- data/lib/rubygems/commands/pristine_command.rb +19 -4
- data/lib/rubygems/commands/push_command.rb +12 -1
- data/lib/rubygems/commands/query_command.rb +43 -27
- data/lib/rubygems/commands/rdoc_command.rb +23 -28
- data/lib/rubygems/commands/search_command.rb +4 -18
- data/lib/rubygems/commands/server_command.rb +1 -1
- data/lib/rubygems/commands/setup_command.rb +124 -38
- data/lib/rubygems/commands/sources_command.rb +16 -16
- data/lib/rubygems/commands/specification_command.rb +11 -13
- data/lib/rubygems/commands/uninstall_command.rb +24 -7
- data/lib/rubygems/commands/unpack_command.rb +7 -3
- data/lib/rubygems/commands/update_command.rb +22 -36
- data/lib/rubygems/commands/yank_command.rb +98 -0
- data/lib/rubygems/compatibility.rb +51 -0
- data/lib/rubygems/config_file.rb +82 -54
- data/lib/rubygems/core_ext/kernel_gem.rb +53 -0
- data/lib/rubygems/core_ext/kernel_require.rb +119 -0
- data/lib/rubygems/defaults.rb +10 -21
- data/lib/rubygems/dependency.rb +61 -10
- data/lib/rubygems/dependency_installer.rb +157 -69
- data/lib/rubygems/dependency_list.rb +11 -19
- data/lib/rubygems/dependency_resolver.rb +562 -0
- data/lib/rubygems/deprecate.rb +40 -40
- data/lib/rubygems/errors.rb +77 -24
- data/lib/rubygems/exceptions.rb +25 -7
- data/lib/rubygems/ext/builder.rb +20 -23
- data/lib/rubygems/ext/configure_builder.rb +2 -2
- data/lib/rubygems/ext/ext_conf_builder.rb +5 -45
- data/lib/rubygems/ext/rake_builder.rb +2 -2
- data/lib/rubygems/gem_runner.rb +3 -16
- data/lib/rubygems/gemcutter_utilities.rb +22 -7
- data/lib/rubygems/indexer.rb +6 -159
- data/lib/rubygems/install_message.rb +12 -0
- data/lib/rubygems/install_update_options.rb +56 -18
- data/lib/rubygems/installer.rb +244 -134
- data/lib/rubygems/installer_test_case.rb +71 -19
- data/lib/rubygems/mock_gem_ui.rb +17 -0
- data/lib/rubygems/name_tuple.rb +110 -0
- data/lib/rubygems/package.rb +514 -43
- data/lib/rubygems/package/digest_io.rb +64 -0
- data/lib/rubygems/package/old.rb +147 -0
- data/lib/rubygems/package/tar_header.rb +18 -55
- data/lib/rubygems/package/tar_reader.rb +20 -3
- data/lib/rubygems/package/tar_writer.rb +63 -7
- data/lib/rubygems/package_task.rb +3 -4
- data/lib/rubygems/path_support.rb +14 -7
- data/lib/rubygems/platform.rb +19 -26
- data/lib/rubygems/rdoc.rb +316 -0
- data/lib/rubygems/remote_fetcher.rb +117 -54
- data/lib/rubygems/request_set.rb +182 -0
- data/lib/rubygems/requirement.rb +63 -26
- data/lib/rubygems/security.rb +295 -555
- data/lib/rubygems/security/policies.rb +115 -0
- data/lib/rubygems/security/policy.rb +227 -0
- data/lib/rubygems/security/signer.rb +136 -0
- data/lib/rubygems/security/trust_dir.rb +104 -0
- data/lib/rubygems/server.rb +45 -55
- data/lib/rubygems/source.rb +144 -0
- data/lib/rubygems/source_list.rb +87 -0
- data/lib/rubygems/source_local.rb +92 -0
- data/lib/rubygems/source_specific_file.rb +28 -0
- data/lib/rubygems/spec_fetcher.rb +116 -184
- data/lib/rubygems/specification.rb +731 -335
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot.pem +88 -30
- data/lib/rubygems/ssl_certs/Entrust_net-Secure-Server-Certification-Authority.pem +90 -0
- data/lib/rubygems/ssl_certs/VerisignClass3PublicPrimaryCertificationAuthority-G2.pem +57 -0
- data/lib/rubygems/syck_hack.rb +2 -0
- data/lib/rubygems/test_case.rb +199 -109
- data/lib/rubygems/test_utilities.rb +25 -5
- data/lib/rubygems/uninstaller.rb +62 -20
- data/lib/rubygems/user_interaction.rb +10 -0
- data/lib/rubygems/validator.rb +33 -40
- data/lib/rubygems/version.rb +19 -8
- data/setup.rb +8 -1
- data/test/rubygems/alternate_cert.pem +9 -0
- data/test/rubygems/alternate_cert_32.pem +9 -0
- data/test/rubygems/alternate_key.pem +9 -0
- data/test/rubygems/bad_rake.rb +1 -0
- data/test/rubygems/child_cert.pem +9 -0
- data/test/rubygems/child_cert_32.pem +9 -0
- data/test/rubygems/child_key.pem +9 -0
- data/test/rubygems/data/null-type.gemspec.rz +0 -0
- data/test/rubygems/expired_cert.pem +9 -0
- data/test/rubygems/future_cert.pem +9 -0
- data/test/rubygems/future_cert_32.pem +9 -0
- data/test/rubygems/good_rake.rb +1 -0
- data/test/rubygems/grandchild_cert.pem +9 -0
- data/test/rubygems/grandchild_cert_32.pem +9 -0
- data/test/rubygems/grandchild_key.pem +9 -0
- data/test/rubygems/invalid_issuer_cert.pem +9 -0
- data/test/rubygems/invalid_issuer_cert_32.pem +9 -0
- data/test/rubygems/invalid_key.pem +9 -0
- data/test/rubygems/invalid_signer_cert.pem +9 -0
- data/test/rubygems/invalid_signer_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_cert.pem +9 -0
- data/test/rubygems/invalidchild_cert_32.pem +9 -0
- data/test/rubygems/invalidchild_key.pem +9 -0
- data/test/rubygems/plugin/exception/rubygems_plugin.rb +1 -1
- data/test/rubygems/plugin/standarderror/rubygems_plugin.rb +1 -1
- data/test/rubygems/private_key.pem +7 -25
- data/test/rubygems/public_cert.pem +8 -18
- data/test/rubygems/public_cert_32.pem +10 -0
- data/test/rubygems/public_key.pem +4 -0
- data/test/rubygems/rubygems/commands/crash_command.rb +1 -1
- data/test/rubygems/test_config.rb +4 -6
- data/test/rubygems/test_deprecate.rb +76 -0
- data/test/rubygems/test_gem.rb +318 -83
- data/test/rubygems/test_gem_available_set.rb +106 -0
- data/test/rubygems/test_gem_command.rb +10 -0
- data/test/rubygems/test_gem_command_manager.rb +55 -9
- data/test/rubygems/test_gem_commands_build_command.rb +11 -19
- data/test/rubygems/test_gem_commands_cert_command.rb +441 -42
- data/test/rubygems/test_gem_commands_cleanup_command.rb +29 -1
- data/test/rubygems/test_gem_commands_contents_command.rb +23 -0
- data/test/rubygems/test_gem_commands_dependency_command.rb +5 -0
- data/test/rubygems/test_gem_commands_fetch_command.rb +19 -20
- data/test/rubygems/test_gem_commands_generate_index_command.rb +2 -83
- data/test/rubygems/test_gem_commands_help_command.rb +2 -1
- data/test/rubygems/test_gem_commands_install_command.rb +647 -48
- data/test/rubygems/test_gem_commands_mirror.rb +32 -0
- data/test/rubygems/test_gem_commands_owner_command.rb +4 -8
- data/test/rubygems/test_gem_commands_pristine_command.rb +99 -4
- data/test/rubygems/test_gem_commands_push_command.rb +62 -8
- data/test/rubygems/test_gem_commands_query_command.rb +51 -0
- data/test/rubygems/test_gem_commands_search_command.rb +25 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +45 -0
- data/test/rubygems/test_gem_commands_sources_command.rb +21 -6
- data/test/rubygems/test_gem_commands_specification_command.rb +33 -1
- data/test/rubygems/test_gem_commands_uninstall_command.rb +91 -31
- data/test/rubygems/test_gem_commands_unpack_command.rb +3 -3
- data/test/rubygems/test_gem_commands_update_command.rb +56 -38
- data/test/rubygems/test_gem_commands_which_command.rb +4 -4
- data/test/rubygems/test_gem_commands_yank_command.rb +97 -0
- data/test/rubygems/test_gem_config_file.rb +66 -21
- data/test/rubygems/test_gem_dependency.rb +46 -0
- data/test/rubygems/test_gem_dependency_installer.rb +228 -18
- data/test/rubygems/test_gem_dependency_list.rb +0 -9
- data/test/rubygems/test_gem_dependency_resolver.rb +327 -0
- data/test/rubygems/test_gem_ext_configure_builder.rb +4 -4
- data/test/rubygems/test_gem_ext_ext_conf_builder.rb +21 -49
- data/test/rubygems/test_gem_ext_rake_builder.rb +13 -13
- data/test/rubygems/test_gem_gem_runner.rb +27 -5
- data/test/rubygems/test_gem_gemcutter_utilities.rb +19 -0
- data/test/rubygems/test_gem_indexer.rb +14 -227
- data/test/rubygems/test_gem_install_update_options.rb +83 -3
- data/test/rubygems/test_gem_installer.rb +211 -236
- data/test/rubygems/test_gem_local_remote_options.rb +8 -2
- data/test/rubygems/test_gem_name_tuple.rb +15 -0
- data/test/rubygems/test_gem_package.rb +547 -0
- data/test/rubygems/test_gem_package_old.rb +37 -0
- data/test/rubygems/test_gem_package_tar_reader.rb +32 -0
- data/test/rubygems/test_gem_package_tar_writer.rb +84 -1
- data/test/rubygems/test_gem_path_support.rb +4 -30
- data/test/rubygems/test_gem_platform.rb +3 -6
- data/test/rubygems/test_gem_rdoc.rb +245 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +51 -5
- data/test/rubygems/test_gem_request_set.rb +70 -0
- data/test/rubygems/test_gem_requirement.rb +53 -24
- data/test/rubygems/test_gem_security.rb +189 -43
- data/test/rubygems/test_gem_security_policy.rb +376 -0
- data/test/rubygems/test_gem_security_signer.rb +184 -0
- data/test/rubygems/test_gem_security_trust_dir.rb +94 -0
- data/test/rubygems/test_gem_server.rb +31 -36
- data/test/rubygems/test_gem_silent_ui.rb +2 -2
- data/test/rubygems/test_gem_source.rb +188 -0
- data/test/rubygems/test_gem_source_list.rb +87 -0
- data/test/rubygems/test_gem_source_local.rb +83 -0
- data/test/rubygems/test_gem_source_specific_file.rb +33 -0
- data/test/rubygems/test_gem_spec_fetcher.rb +91 -255
- data/test/rubygems/test_gem_specification.rb +293 -39
- data/test/rubygems/test_gem_uninstaller.rb +136 -13
- data/test/rubygems/test_gem_validator.rb +14 -41
- data/test/rubygems/test_gem_version.rb +15 -21
- data/test/rubygems/test_require.rb +193 -0
- data/test/rubygems/wrong_key_cert.pem +9 -0
- data/test/rubygems/wrong_key_cert_32.pem +9 -0
- metadata +171 -83
- metadata.gz.sig +1 -0
- data/CVE-2013-4287.txt +0 -36
- data/CVE-2013-4363.txt +0 -45
- data/ci_build.sh +0 -27
- data/cruise_config.rb +0 -32
- data/lib/rbconfig/datadir.rb +0 -13
- data/lib/rubygems/builder.rb +0 -99
- data/lib/rubygems/custom_require.rb +0 -69
- data/lib/rubygems/doc_manager.rb +0 -243
- data/lib/rubygems/format.rb +0 -82
- data/lib/rubygems/gem_openssl.rb +0 -90
- data/lib/rubygems/gem_path_searcher.rb +0 -172
- data/lib/rubygems/old_format.rb +0 -153
- data/lib/rubygems/package/f_sync_dir.rb +0 -23
- data/lib/rubygems/package/tar_input.rb +0 -234
- data/lib/rubygems/package/tar_output.rb +0 -146
- data/lib/rubygems/require_paths_builder.rb +0 -18
- data/lib/rubygems/source_index.rb +0 -406
- data/lib/rubygems/ssl_certs/AddTrustExternalCARoot-2048.pem +0 -25
- data/lib/rubygems/ssl_certs/Class3PublicPrimaryCertificationAuthority.pem +0 -14
- data/lib/rubygems/ssl_certs/DigiCertHighAssuranceEVRootCA.pem +0 -23
- data/lib/rubygems/ssl_certs/EntrustnetSecureServerCertificationAuthority.pem +0 -28
- data/lib/rubygems/ssl_certs/GeoTrustGlobalCA.pem +0 -20
- data/test/rubygems/test_bundled_ca.rb +0 -59
- data/test/rubygems/test_gem_builder.rb +0 -44
- data/test/rubygems/test_gem_doc_manager.rb +0 -32
- data/test/rubygems/test_gem_ext_builder.rb +0 -58
- data/test/rubygems/test_gem_format.rb +0 -88
- data/test/rubygems/test_gem_gem_path_searcher.rb +0 -94
- data/test/rubygems/test_gem_package_tar_input.rb +0 -129
- data/test/rubygems/test_gem_package_tar_output.rb +0 -101
- data/test/rubygems/test_gem_source_index.rb +0 -250
- data/util/update_bundled_ca_certificates.rb +0 -103
@@ -0,0 +1,64 @@
|
|
1
|
+
##
|
2
|
+
# IO wrapper that creates digests of contents written to the IO it wraps.
|
3
|
+
|
4
|
+
class Gem::Package::DigestIO
|
5
|
+
|
6
|
+
##
|
7
|
+
# Collected digests for wrapped writes.
|
8
|
+
#
|
9
|
+
# {
|
10
|
+
# 'SHA1' => #<OpenSSL::Digest: [...]>,
|
11
|
+
# 'SHA512' => #<OpenSSL::Digest: [...]>,
|
12
|
+
# }
|
13
|
+
|
14
|
+
attr_reader :digests
|
15
|
+
|
16
|
+
##
|
17
|
+
# Wraps +io+ and updates digest for each of the digest algorithms in
|
18
|
+
# the +digests+ Hash. Returns the digests hash. Example:
|
19
|
+
#
|
20
|
+
# io = StringIO.new
|
21
|
+
# digests = {
|
22
|
+
# 'SHA1' => OpenSSL::Digest.new('SHA1'),
|
23
|
+
# 'SHA512' => OpenSSL::Digest.new('SHA512'),
|
24
|
+
# }
|
25
|
+
#
|
26
|
+
# Gem::Package::DigestIO.wrap io, digests do |digest_io|
|
27
|
+
# digest_io.write "hello"
|
28
|
+
# end
|
29
|
+
#
|
30
|
+
# digests['SHA1'].hexdigest #=> "aaf4c61d[...]"
|
31
|
+
# digests['SHA512'].hexdigest #=> "9b71d224[...]"
|
32
|
+
|
33
|
+
def self.wrap io, digests
|
34
|
+
digest_io = new io, digests
|
35
|
+
|
36
|
+
yield digest_io
|
37
|
+
|
38
|
+
return digests
|
39
|
+
end
|
40
|
+
|
41
|
+
##
|
42
|
+
# Creates a new DigestIO instance. Using ::wrap is recommended, see the
|
43
|
+
# ::wrap documentation for documentation of +io+ and +digests+.
|
44
|
+
|
45
|
+
def initialize io, digests
|
46
|
+
@io = io
|
47
|
+
@digests = digests
|
48
|
+
end
|
49
|
+
|
50
|
+
##
|
51
|
+
# Writes +data+ to the underlying IO and updates the digests
|
52
|
+
|
53
|
+
def write data
|
54
|
+
result = @io.write data
|
55
|
+
|
56
|
+
@digests.each do |_, digest|
|
57
|
+
digest << data
|
58
|
+
end
|
59
|
+
|
60
|
+
result
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,147 @@
|
|
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
|
+
##
|
8
|
+
# The format class knows the guts of the ancient .gem file format and provides
|
9
|
+
# the capability to read such ancient gems.
|
10
|
+
#
|
11
|
+
# Please pretend this doesn't exist.
|
12
|
+
|
13
|
+
class Gem::Package::Old < Gem::Package
|
14
|
+
|
15
|
+
undef_method :spec=
|
16
|
+
|
17
|
+
##
|
18
|
+
# Creates a new old-format package reader for +gem+. Old-format packages
|
19
|
+
# cannot be written.
|
20
|
+
|
21
|
+
def initialize gem
|
22
|
+
require 'fileutils'
|
23
|
+
require 'zlib'
|
24
|
+
Gem.load_yaml
|
25
|
+
|
26
|
+
@gem = gem
|
27
|
+
@contents = nil
|
28
|
+
@spec = nil
|
29
|
+
end
|
30
|
+
|
31
|
+
##
|
32
|
+
# A list of file names contained in this gem
|
33
|
+
|
34
|
+
def contents
|
35
|
+
return @contents if @contents
|
36
|
+
|
37
|
+
open @gem, 'rb' do |io|
|
38
|
+
read_until_dashes io # spec
|
39
|
+
header = file_list io
|
40
|
+
|
41
|
+
@contents = header.map { |file| file['path'] }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Extracts the files in this package into +destination_dir+
|
47
|
+
|
48
|
+
def extract_files destination_dir
|
49
|
+
errstr = "Error reading files from gem"
|
50
|
+
|
51
|
+
open @gem, 'rb' do |io|
|
52
|
+
read_until_dashes io # spec
|
53
|
+
header = file_list io
|
54
|
+
raise Gem::Exception, errstr unless header
|
55
|
+
|
56
|
+
header.each do |entry|
|
57
|
+
full_name = entry['path']
|
58
|
+
|
59
|
+
destination = install_location full_name, destination_dir
|
60
|
+
|
61
|
+
file_data = ''
|
62
|
+
|
63
|
+
read_until_dashes io do |line|
|
64
|
+
file_data << line
|
65
|
+
end
|
66
|
+
|
67
|
+
file_data = file_data.strip.unpack("m")[0]
|
68
|
+
file_data = Zlib::Inflate.inflate file_data
|
69
|
+
|
70
|
+
raise Gem::Package::FormatError, "#{full_name} in #{@gem} is corrupt" if
|
71
|
+
file_data.length != entry['size'].to_i
|
72
|
+
|
73
|
+
FileUtils.rm_rf destination
|
74
|
+
|
75
|
+
FileUtils.mkdir_p File.dirname destination
|
76
|
+
|
77
|
+
open destination, 'wb', entry['mode'] do |out|
|
78
|
+
out.write file_data
|
79
|
+
end
|
80
|
+
|
81
|
+
say destination if Gem.configuration.really_verbose
|
82
|
+
end
|
83
|
+
end
|
84
|
+
rescue Zlib::DataError
|
85
|
+
raise Gem::Exception, errstr
|
86
|
+
end
|
87
|
+
|
88
|
+
##
|
89
|
+
# Reads the file list section from the old-format gem +io+
|
90
|
+
|
91
|
+
def file_list io # :nodoc:
|
92
|
+
header = ''
|
93
|
+
|
94
|
+
read_until_dashes io do |line|
|
95
|
+
header << line
|
96
|
+
end
|
97
|
+
|
98
|
+
YAML.load header
|
99
|
+
end
|
100
|
+
|
101
|
+
##
|
102
|
+
# Reads lines until a "---" separator is found
|
103
|
+
|
104
|
+
def read_until_dashes io # :nodoc:
|
105
|
+
while (line = io.gets) && line.chomp.strip != "---" do
|
106
|
+
yield line if block_given?
|
107
|
+
end
|
108
|
+
end
|
109
|
+
|
110
|
+
##
|
111
|
+
# Skips the Ruby self-install header in +io+.
|
112
|
+
|
113
|
+
def skip_ruby io # :nodoc:
|
114
|
+
loop do
|
115
|
+
line = io.gets
|
116
|
+
|
117
|
+
return if line.chomp == '__END__'
|
118
|
+
break unless line
|
119
|
+
end
|
120
|
+
|
121
|
+
raise Gem::Exception, "Failed to find end of ruby script while reading gem"
|
122
|
+
end
|
123
|
+
|
124
|
+
##
|
125
|
+
# The specification for this gem
|
126
|
+
|
127
|
+
def spec
|
128
|
+
return @spec if @spec
|
129
|
+
|
130
|
+
yaml = ''
|
131
|
+
|
132
|
+
open @gem, 'rb' do |io|
|
133
|
+
skip_ruby io
|
134
|
+
read_until_dashes io do |line|
|
135
|
+
yaml << line
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
@spec = Gem::Specification.from_yaml yaml
|
140
|
+
rescue YAML::SyntaxError => e
|
141
|
+
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
142
|
+
rescue ArgumentError => e
|
143
|
+
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
144
|
+
end
|
145
|
+
|
146
|
+
end
|
147
|
+
|
@@ -102,61 +102,24 @@ class Gem::Package::TarHeader
|
|
102
102
|
|
103
103
|
fields = header.unpack UNPACK_FORMAT
|
104
104
|
|
105
|
-
name
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
:mode => mode,
|
124
|
-
:uid => uid,
|
125
|
-
:gid => gid,
|
126
|
-
:size => size,
|
127
|
-
:mtime => mtime,
|
128
|
-
:checksum => checksum,
|
129
|
-
:typeflag => typeflag,
|
130
|
-
:linkname => linkname,
|
131
|
-
:magic => magic,
|
132
|
-
:version => version,
|
133
|
-
:uname => uname,
|
134
|
-
:gname => gname,
|
135
|
-
:devmajor => devmajor,
|
136
|
-
:devminor => devminor,
|
137
|
-
:prefix => prefix,
|
138
|
-
|
139
|
-
:empty => empty
|
140
|
-
|
141
|
-
# HACK unfactor for Rubinius
|
142
|
-
#new :name => fields.shift,
|
143
|
-
# :mode => fields.shift.oct,
|
144
|
-
# :uid => fields.shift.oct,
|
145
|
-
# :gid => fields.shift.oct,
|
146
|
-
# :size => fields.shift.oct,
|
147
|
-
# :mtime => fields.shift.oct,
|
148
|
-
# :checksum => fields.shift.oct,
|
149
|
-
# :typeflag => fields.shift,
|
150
|
-
# :linkname => fields.shift,
|
151
|
-
# :magic => fields.shift,
|
152
|
-
# :version => fields.shift.oct,
|
153
|
-
# :uname => fields.shift,
|
154
|
-
# :gname => fields.shift,
|
155
|
-
# :devmajor => fields.shift.oct,
|
156
|
-
# :devminor => fields.shift.oct,
|
157
|
-
# :prefix => fields.shift,
|
158
|
-
|
159
|
-
# :empty => empty
|
105
|
+
new :name => fields.shift,
|
106
|
+
:mode => fields.shift.oct,
|
107
|
+
:uid => fields.shift.oct,
|
108
|
+
:gid => fields.shift.oct,
|
109
|
+
:size => fields.shift.oct,
|
110
|
+
:mtime => fields.shift.oct,
|
111
|
+
:checksum => fields.shift.oct,
|
112
|
+
:typeflag => fields.shift,
|
113
|
+
:linkname => fields.shift,
|
114
|
+
:magic => fields.shift,
|
115
|
+
:version => fields.shift.oct,
|
116
|
+
:uname => fields.shift,
|
117
|
+
:gname => fields.shift,
|
118
|
+
:devmajor => fields.shift.oct,
|
119
|
+
:devminor => fields.shift.oct,
|
120
|
+
:prefix => fields.shift,
|
121
|
+
|
122
|
+
:empty => empty
|
160
123
|
end
|
161
124
|
|
162
125
|
##
|
@@ -9,7 +9,7 @@
|
|
9
9
|
|
10
10
|
class Gem::Package::TarReader
|
11
11
|
|
12
|
-
include
|
12
|
+
include Enumerable
|
13
13
|
|
14
14
|
##
|
15
15
|
# Raised if the tar IO is not seekable
|
@@ -52,9 +52,9 @@ class Gem::Package::TarReader
|
|
52
52
|
# Iterates over files in the tarball yielding each entry
|
53
53
|
|
54
54
|
def each
|
55
|
-
|
56
|
-
return if @io.eof?
|
55
|
+
return enum_for __method__ unless block_given?
|
57
56
|
|
57
|
+
until @io.eof? do
|
58
58
|
header = Gem::Package::TarHeader.from @io
|
59
59
|
return if header.empty?
|
60
60
|
|
@@ -100,6 +100,23 @@ class Gem::Package::TarReader
|
|
100
100
|
end
|
101
101
|
end
|
102
102
|
|
103
|
+
##
|
104
|
+
# Seeks through the tar file until it finds the +entry+ with +name+ and
|
105
|
+
# yields it. Rewinds the tar file to the beginning when the block
|
106
|
+
# terminates.
|
107
|
+
|
108
|
+
def seek name # :yields: entry
|
109
|
+
found = find do |entry|
|
110
|
+
entry.full_name == name
|
111
|
+
end
|
112
|
+
|
113
|
+
return unless found
|
114
|
+
|
115
|
+
return yield found
|
116
|
+
ensure
|
117
|
+
rewind
|
118
|
+
end
|
119
|
+
|
103
120
|
end
|
104
121
|
|
105
122
|
require 'rubygems/package/tar_reader/entry'
|
@@ -40,12 +40,12 @@ class Gem::Package::TarWriter
|
|
40
40
|
# number of bytes will be more than #limit
|
41
41
|
|
42
42
|
def write(data)
|
43
|
-
if data.
|
43
|
+
if data.bytesize + @written > @limit
|
44
44
|
raise FileOverflow, "You tried to feed more data than fits in the file."
|
45
45
|
end
|
46
46
|
@io.write data
|
47
|
-
@written += data.
|
48
|
-
data.
|
47
|
+
@written += data.bytesize
|
48
|
+
data.bytesize
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
@@ -129,6 +129,62 @@ class Gem::Package::TarWriter
|
|
129
129
|
self
|
130
130
|
end
|
131
131
|
|
132
|
+
##
|
133
|
+
# Adds +name+ with permissions +mode+ to the tar, yielding +io+ for writing
|
134
|
+
# the file. The +digest_algorithm+ is written to a read-only +name+.sum
|
135
|
+
# file following the given file contents containing the digest name and
|
136
|
+
# hexdigest separated by a tab.
|
137
|
+
#
|
138
|
+
# The created digest object is returned.
|
139
|
+
|
140
|
+
def add_file_digest name, mode, digest_algorithms # :yields: io
|
141
|
+
digests = digest_algorithms.map do |digest_algorithm|
|
142
|
+
digest = digest_algorithm.new
|
143
|
+
[digest.name, digest]
|
144
|
+
end
|
145
|
+
|
146
|
+
digests = Hash[*digests.flatten]
|
147
|
+
|
148
|
+
add_file name, mode do |io|
|
149
|
+
Gem::Package::DigestIO.wrap io, digests do |digest_io|
|
150
|
+
yield digest_io
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
digests
|
155
|
+
end
|
156
|
+
|
157
|
+
##
|
158
|
+
# Adds +name+ with permissions +mode+ to the tar, yielding +io+ for writing
|
159
|
+
# the file. The +signer+ is used to add a digest file using its
|
160
|
+
# digest_algorithm per add_file_digest and a cryptographic signature in
|
161
|
+
# +name+.sig. If the signer has no key only the checksum file is added.
|
162
|
+
#
|
163
|
+
# Returns the digest.
|
164
|
+
|
165
|
+
def add_file_signed name, mode, signer
|
166
|
+
digest_algorithms = [
|
167
|
+
signer.digest_algorithm,
|
168
|
+
OpenSSL::Digest::SHA512,
|
169
|
+
].uniq
|
170
|
+
|
171
|
+
digests = add_file_digest name, mode, digest_algorithms do |io|
|
172
|
+
yield io
|
173
|
+
end
|
174
|
+
|
175
|
+
signature_digest = digests.values.find do |digest|
|
176
|
+
digest.name == signer.digest_name
|
177
|
+
end
|
178
|
+
|
179
|
+
signature = signer.sign signature_digest.digest
|
180
|
+
|
181
|
+
add_file_simple "#{name}.sig", 0444, signature.length do |io|
|
182
|
+
io.write signature
|
183
|
+
end if signature
|
184
|
+
|
185
|
+
digests
|
186
|
+
end
|
187
|
+
|
132
188
|
##
|
133
189
|
# Add file +name+ with permissions +mode+ +size+ bytes long. Yields an IO
|
134
190
|
# to write the file to.
|
@@ -211,9 +267,9 @@ class Gem::Package::TarWriter
|
|
211
267
|
# Splits +name+ into a name and prefix that can fit in the TarHeader
|
212
268
|
|
213
269
|
def split_name(name) # :nodoc:
|
214
|
-
raise Gem::Package::TooLongFileName if name.
|
270
|
+
raise Gem::Package::TooLongFileName if name.bytesize > 256
|
215
271
|
|
216
|
-
if name.
|
272
|
+
if name.bytesize <= 100 then
|
217
273
|
prefix = ""
|
218
274
|
else
|
219
275
|
parts = name.split(/\//)
|
@@ -222,14 +278,14 @@ class Gem::Package::TarWriter
|
|
222
278
|
|
223
279
|
loop do
|
224
280
|
nxt = parts.pop
|
225
|
-
break if newname.
|
281
|
+
break if newname.bytesize + 1 + nxt.bytesize > 100
|
226
282
|
newname = nxt + "/" + newname
|
227
283
|
end
|
228
284
|
|
229
285
|
prefix = (parts + [nxt]).join "/"
|
230
286
|
name = newname
|
231
287
|
|
232
|
-
if name.
|
288
|
+
if name.bytesize > 100 or prefix.bytesize > 155 then
|
233
289
|
raise Gem::Package::TooLongFileName
|
234
290
|
end
|
235
291
|
end
|
@@ -20,6 +20,7 @@
|
|
20
20
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
21
21
|
|
22
22
|
require 'rubygems'
|
23
|
+
require 'rubygems/package'
|
23
24
|
begin
|
24
25
|
gem 'rake'
|
25
26
|
rescue Gem::LoadError
|
@@ -43,13 +44,10 @@ require 'rake/packagetask'
|
|
43
44
|
# require 'rubygems/package_task'
|
44
45
|
#
|
45
46
|
# spec = Gem::Specification.new do |s|
|
46
|
-
# s.platform = Gem::Platform::RUBY
|
47
47
|
# s.summary = "Ruby based make-like utility."
|
48
48
|
# s.name = 'rake'
|
49
49
|
# s.version = PKG_VERSION
|
50
50
|
# s.requirements << 'none'
|
51
|
-
# s.require_path = 'lib'
|
52
|
-
# s.autorequire = 'rake'
|
53
51
|
# s.files = PKG_FILES
|
54
52
|
# s.description = <<-EOF
|
55
53
|
# Rake is a Make-like program implemented in Ruby. Tasks
|
@@ -113,7 +111,8 @@ class Gem::PackageTask < Rake::PackageTask
|
|
113
111
|
file gem_path => [package_dir, gem_dir] + @gem_spec.files do
|
114
112
|
chdir(gem_dir) do
|
115
113
|
when_writing "Creating #{gem_spec.file_name}" do
|
116
|
-
Gem::
|
114
|
+
Gem::Package.build gem_spec
|
115
|
+
|
117
116
|
verbose trace do
|
118
117
|
mv gem_file, '..'
|
119
118
|
end
|