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
@@ -1,23 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2004 Mauricio Julio Fernández Pradier
|
4
|
-
# See LICENSE.txt for additional licensing information.
|
5
|
-
#++
|
6
|
-
|
7
|
-
module Gem::Package::FSyncDir
|
8
|
-
|
9
|
-
private
|
10
|
-
|
11
|
-
##
|
12
|
-
# make sure this hits the disc
|
13
|
-
|
14
|
-
def fsync_dir(dirname)
|
15
|
-
dir = open dirname, 'r'
|
16
|
-
dir.fsync
|
17
|
-
rescue # ignore IOError if it's an unpatched (old) Ruby
|
18
|
-
ensure
|
19
|
-
dir.close if dir rescue nil
|
20
|
-
end
|
21
|
-
|
22
|
-
end
|
23
|
-
|
@@ -1,234 +0,0 @@
|
|
1
|
-
# -*- coding: iso-8859-1 -*-
|
2
|
-
#++
|
3
|
-
# Copyright (C) 2004 Mauricio Julio Fern�ndez Pradier
|
4
|
-
# See LICENSE.txt for additional licensing information.
|
5
|
-
#--
|
6
|
-
|
7
|
-
require 'zlib'
|
8
|
-
|
9
|
-
class Gem::Package::TarInput
|
10
|
-
|
11
|
-
include Gem::Package::FSyncDir
|
12
|
-
include Enumerable
|
13
|
-
|
14
|
-
attr_reader :metadata
|
15
|
-
|
16
|
-
private_class_method :new
|
17
|
-
|
18
|
-
def self.open(io, security_policy = nil, &block)
|
19
|
-
is = new io, security_policy
|
20
|
-
|
21
|
-
yield is
|
22
|
-
ensure
|
23
|
-
is.close if is
|
24
|
-
end
|
25
|
-
|
26
|
-
def initialize(io, security_policy = nil)
|
27
|
-
@io = io
|
28
|
-
@tarreader = Gem::Package::TarReader.new @io
|
29
|
-
has_meta = false
|
30
|
-
|
31
|
-
data_sig, meta_sig, data_dgst, meta_dgst = nil, nil, nil, nil
|
32
|
-
dgst_algo = security_policy ? Gem::Security::OPT[:dgst_algo] : nil
|
33
|
-
|
34
|
-
@tarreader.each do |entry|
|
35
|
-
case entry.full_name
|
36
|
-
when "metadata"
|
37
|
-
@metadata = load_gemspec entry.read
|
38
|
-
has_meta = true
|
39
|
-
when "metadata.gz"
|
40
|
-
begin
|
41
|
-
# if we have a security_policy, then pre-read the metadata file
|
42
|
-
# and calculate it's digest
|
43
|
-
sio = nil
|
44
|
-
if security_policy
|
45
|
-
Gem.ensure_ssl_available
|
46
|
-
sio = StringIO.new(entry.read)
|
47
|
-
meta_dgst = dgst_algo.digest(sio.string)
|
48
|
-
sio.rewind
|
49
|
-
end
|
50
|
-
|
51
|
-
# Ruby 1.8 doesn't have encoding and YAML is UTF-8
|
52
|
-
args = [sio || entry]
|
53
|
-
args << { :external_encoding => Encoding::UTF_8 } if
|
54
|
-
Object.const_defined?(:Encoding)
|
55
|
-
|
56
|
-
gzis = Zlib::GzipReader.new(*args)
|
57
|
-
|
58
|
-
# YAML wants an instance of IO
|
59
|
-
@metadata = load_gemspec(gzis)
|
60
|
-
has_meta = true
|
61
|
-
ensure
|
62
|
-
gzis.close unless gzis.nil?
|
63
|
-
end
|
64
|
-
when 'metadata.gz.sig'
|
65
|
-
meta_sig = entry.read
|
66
|
-
when 'data.tar.gz.sig'
|
67
|
-
data_sig = entry.read
|
68
|
-
when 'data.tar.gz'
|
69
|
-
if security_policy
|
70
|
-
Gem.ensure_ssl_available
|
71
|
-
data_dgst = dgst_algo.digest(entry.read)
|
72
|
-
end
|
73
|
-
end
|
74
|
-
end
|
75
|
-
|
76
|
-
if security_policy then
|
77
|
-
Gem.ensure_ssl_available
|
78
|
-
|
79
|
-
# map trust policy from string to actual class (or a serialized YAML
|
80
|
-
# file, if that exists)
|
81
|
-
if String === security_policy then
|
82
|
-
if Gem::Security::Policies.key? security_policy then
|
83
|
-
# load one of the pre-defined security policies
|
84
|
-
security_policy = Gem::Security::Policies[security_policy]
|
85
|
-
elsif File.exist? security_policy then
|
86
|
-
# FIXME: this doesn't work yet
|
87
|
-
security_policy = YAML.load File.read(security_policy)
|
88
|
-
else
|
89
|
-
raise Gem::Exception, "Unknown trust policy '#{security_policy}'"
|
90
|
-
end
|
91
|
-
end
|
92
|
-
|
93
|
-
if data_sig && data_dgst && meta_sig && meta_dgst then
|
94
|
-
# the user has a trust policy, and we have a signed gem
|
95
|
-
# file, so use the trust policy to verify the gem signature
|
96
|
-
|
97
|
-
begin
|
98
|
-
security_policy.verify_gem(data_sig, data_dgst, @metadata.cert_chain)
|
99
|
-
rescue Exception => e
|
100
|
-
raise "Couldn't verify data signature: #{e}"
|
101
|
-
end
|
102
|
-
|
103
|
-
begin
|
104
|
-
security_policy.verify_gem(meta_sig, meta_dgst, @metadata.cert_chain)
|
105
|
-
rescue Exception => e
|
106
|
-
raise "Couldn't verify metadata signature: #{e}"
|
107
|
-
end
|
108
|
-
elsif security_policy.only_signed
|
109
|
-
raise Gem::Exception, "Unsigned gem"
|
110
|
-
else
|
111
|
-
# FIXME: should display warning here (trust policy, but
|
112
|
-
# either unsigned or badly signed gem file)
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
@tarreader.rewind
|
117
|
-
|
118
|
-
unless has_meta then
|
119
|
-
path = io.path if io.respond_to? :path
|
120
|
-
error = Gem::Package::FormatError.new 'no metadata found', path
|
121
|
-
raise error
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def close
|
126
|
-
@io.close
|
127
|
-
@tarreader.close
|
128
|
-
end
|
129
|
-
|
130
|
-
def each(&block)
|
131
|
-
@tarreader.each do |entry|
|
132
|
-
next unless entry.full_name == "data.tar.gz"
|
133
|
-
is = zipped_stream entry
|
134
|
-
|
135
|
-
begin
|
136
|
-
Gem::Package::TarReader.new is do |inner|
|
137
|
-
inner.each(&block)
|
138
|
-
end
|
139
|
-
ensure
|
140
|
-
is.close if is
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
@tarreader.rewind
|
145
|
-
end
|
146
|
-
|
147
|
-
def extract_entry(destdir, entry, expected_md5sum = nil)
|
148
|
-
if entry.directory? then
|
149
|
-
dest = File.join destdir, entry.full_name
|
150
|
-
|
151
|
-
if File.directory? dest then
|
152
|
-
FileUtils.chmod entry.header.mode, dest, :verbose => false
|
153
|
-
else
|
154
|
-
FileUtils.mkdir_p dest, :mode => entry.header.mode, :verbose => false
|
155
|
-
end
|
156
|
-
|
157
|
-
fsync_dir dest
|
158
|
-
fsync_dir File.join(dest, "..")
|
159
|
-
|
160
|
-
return
|
161
|
-
end
|
162
|
-
|
163
|
-
# it's a file
|
164
|
-
md5 = Digest::MD5.new if expected_md5sum
|
165
|
-
destdir = File.join destdir, File.dirname(entry.full_name)
|
166
|
-
FileUtils.mkdir_p destdir, :mode => 0755, :verbose => false
|
167
|
-
destfile = File.join destdir, File.basename(entry.full_name)
|
168
|
-
FileUtils.chmod 0600, destfile, :verbose => false rescue nil # Errno::ENOENT
|
169
|
-
|
170
|
-
open destfile, "wb", entry.header.mode do |os|
|
171
|
-
loop do
|
172
|
-
data = entry.read 4096
|
173
|
-
break unless data
|
174
|
-
# HACK shouldn't we check the MD5 before writing to disk?
|
175
|
-
md5 << data if expected_md5sum
|
176
|
-
os.write(data)
|
177
|
-
end
|
178
|
-
|
179
|
-
os.fsync
|
180
|
-
end
|
181
|
-
|
182
|
-
FileUtils.chmod entry.header.mode, destfile, :verbose => false
|
183
|
-
fsync_dir File.dirname(destfile)
|
184
|
-
fsync_dir File.join(File.dirname(destfile), "..")
|
185
|
-
|
186
|
-
if expected_md5sum && expected_md5sum != md5.hexdigest then
|
187
|
-
raise Gem::Package::BadCheckSum
|
188
|
-
end
|
189
|
-
end
|
190
|
-
|
191
|
-
# Attempt to YAML-load a gemspec from the given _io_ parameter. Return
|
192
|
-
# nil if it fails.
|
193
|
-
def load_gemspec(io)
|
194
|
-
Gem::Specification.from_yaml io
|
195
|
-
rescue Gem::Exception
|
196
|
-
nil
|
197
|
-
end
|
198
|
-
|
199
|
-
##
|
200
|
-
# Return an IO stream for the zipped entry.
|
201
|
-
#
|
202
|
-
# NOTE: Originally this method used two approaches, Return a GZipReader
|
203
|
-
# directly, or read the GZipReader into a string and return a StringIO on
|
204
|
-
# the string. The string IO approach was used for versions of ZLib before
|
205
|
-
# 1.2.1 to avoid buffer errors on windows machines. Then we found that
|
206
|
-
# errors happened with 1.2.1 as well, so we changed the condition. Then
|
207
|
-
# we discovered errors occurred with versions as late as 1.2.3. At this
|
208
|
-
# point (after some benchmarking to show we weren't seriously crippling
|
209
|
-
# the unpacking speed) we threw our hands in the air and declared that
|
210
|
-
# this method would use the String IO approach on all platforms at all
|
211
|
-
# times. And that's the way it is.
|
212
|
-
#
|
213
|
-
# Revisited. Here's the beginning of the long story.
|
214
|
-
# http://osdir.com/ml/lang.ruby.gems.devel/2007-06/msg00045.html
|
215
|
-
#
|
216
|
-
# StringIO wraping has never worked as a workaround by definition. Skipping
|
217
|
-
# initial 10 bytes and passing -MAX_WBITS to Zlib::Inflate luckily works as
|
218
|
-
# gzip reader, but it only works if the GZip header is 10 bytes long (see
|
219
|
-
# below) and it does not check inflated stream consistency (CRC value in the
|
220
|
-
# Gzip trailer.)
|
221
|
-
#
|
222
|
-
# RubyGems generated Gzip Header: 10 bytes
|
223
|
-
# magic(2) + method(1) + flag(1) + mtime(4) + exflag(1) + os(1) +
|
224
|
-
# orig_name(0) + comment(0)
|
225
|
-
#
|
226
|
-
# Ideally, it must return a GZipReader without meaningless buffering. We
|
227
|
-
# have lots of CRuby committers around so let's fix windows build when we
|
228
|
-
# received an error.
|
229
|
-
def zipped_stream(entry)
|
230
|
-
Zlib::GzipReader.new entry
|
231
|
-
end
|
232
|
-
|
233
|
-
end
|
234
|
-
|
@@ -1,146 +0,0 @@
|
|
1
|
-
# -*- coding: utf-8 -*-
|
2
|
-
#--
|
3
|
-
# Copyright (C) 2004 Mauricio Julio Fernández Pradier
|
4
|
-
# See LICENSE.txt for additional licensing information.
|
5
|
-
#++
|
6
|
-
|
7
|
-
##
|
8
|
-
# TarOutput is a wrapper to TarWriter that builds gem-format tar file.
|
9
|
-
#
|
10
|
-
# Gem-format tar files contain the following files:
|
11
|
-
# [data.tar.gz] A gzipped tar file containing the files that compose the gem
|
12
|
-
# which will be extracted into the gem/ dir on installation.
|
13
|
-
# [metadata.gz] A YAML format Gem::Specification.
|
14
|
-
# [data.tar.gz.sig] A signature for the gem's data.tar.gz.
|
15
|
-
# [metadata.gz.sig] A signature for the gem's metadata.gz.
|
16
|
-
#
|
17
|
-
# See TarOutput::open for usage details.
|
18
|
-
|
19
|
-
class Gem::Package::TarOutput
|
20
|
-
|
21
|
-
##
|
22
|
-
# Creates a new TarOutput which will yield a TarWriter object for the
|
23
|
-
# data.tar.gz portion of a gem-format tar file.
|
24
|
-
#
|
25
|
-
# See #initialize for details on +io+ and +signer+.
|
26
|
-
#
|
27
|
-
# See #add_gem_contents for details on adding metadata to the tar file.
|
28
|
-
|
29
|
-
def self.open(io, signer = nil, &block) # :yield: data_tar_writer
|
30
|
-
tar_outputter = new io, signer
|
31
|
-
tar_outputter.add_gem_contents(&block)
|
32
|
-
tar_outputter.add_metadata
|
33
|
-
tar_outputter.add_signatures
|
34
|
-
|
35
|
-
ensure
|
36
|
-
tar_outputter.close
|
37
|
-
end
|
38
|
-
|
39
|
-
##
|
40
|
-
# Creates a new TarOutput that will write a gem-format tar file to +io+. If
|
41
|
-
# +signer+ is given, the data.tar.gz and metadata.gz will be signed and
|
42
|
-
# the signatures will be added to the tar file.
|
43
|
-
|
44
|
-
def initialize(io, signer)
|
45
|
-
@io = io
|
46
|
-
@signer = signer
|
47
|
-
|
48
|
-
@tar_writer = Gem::Package::TarWriter.new @io
|
49
|
-
|
50
|
-
@metadata = nil
|
51
|
-
|
52
|
-
@data_signature = nil
|
53
|
-
@meta_signature = nil
|
54
|
-
end
|
55
|
-
|
56
|
-
##
|
57
|
-
# Yields a TarWriter for the data.tar.gz inside a gem-format tar file.
|
58
|
-
# The yielded TarWriter has been extended with a #metadata= method for
|
59
|
-
# attaching a YAML format Gem::Specification which will be written by
|
60
|
-
# add_metadata.
|
61
|
-
|
62
|
-
def add_gem_contents
|
63
|
-
@tar_writer.add_file "data.tar.gz", 0644 do |inner|
|
64
|
-
sio = @signer ? StringIO.new : nil
|
65
|
-
Zlib::GzipWriter.wrap(sio || inner) do |os|
|
66
|
-
|
67
|
-
Gem::Package::TarWriter.new os do |data_tar_writer|
|
68
|
-
# :stopdoc:
|
69
|
-
def data_tar_writer.metadata() @metadata end
|
70
|
-
def data_tar_writer.metadata=(metadata) @metadata = metadata end
|
71
|
-
# :startdoc:
|
72
|
-
|
73
|
-
yield data_tar_writer
|
74
|
-
|
75
|
-
@metadata = data_tar_writer.metadata
|
76
|
-
end
|
77
|
-
end
|
78
|
-
|
79
|
-
# if we have a signing key, then sign the data
|
80
|
-
# digest and return the signature
|
81
|
-
if @signer then
|
82
|
-
require 'rubygems/security'
|
83
|
-
digest = Gem::Security::OPT[:dgst_algo].digest sio.string
|
84
|
-
@data_signature = @signer.sign digest
|
85
|
-
inner.write sio.string
|
86
|
-
end
|
87
|
-
end
|
88
|
-
|
89
|
-
self
|
90
|
-
end
|
91
|
-
|
92
|
-
##
|
93
|
-
# Adds metadata.gz to the gem-format tar file which was saved from a
|
94
|
-
# previous #add_gem_contents call.
|
95
|
-
|
96
|
-
def add_metadata
|
97
|
-
return if @metadata.nil?
|
98
|
-
|
99
|
-
@tar_writer.add_file "metadata.gz", 0644 do |io|
|
100
|
-
begin
|
101
|
-
sio = @signer ? StringIO.new : nil
|
102
|
-
gzos = Zlib::GzipWriter.new(sio || io)
|
103
|
-
gzos.write @metadata
|
104
|
-
ensure
|
105
|
-
gzos.flush
|
106
|
-
gzos.finish
|
107
|
-
|
108
|
-
# if we have a signing key, then sign the metadata digest and return
|
109
|
-
# the signature
|
110
|
-
if @signer then
|
111
|
-
require 'rubygems/security'
|
112
|
-
digest = Gem::Security::OPT[:dgst_algo].digest sio.string
|
113
|
-
@meta_signature = @signer.sign digest
|
114
|
-
io.write sio.string
|
115
|
-
end
|
116
|
-
end
|
117
|
-
end
|
118
|
-
end
|
119
|
-
|
120
|
-
##
|
121
|
-
# Adds data.tar.gz.sig and metadata.gz.sig to the gem-format tar files if
|
122
|
-
# a Gem::Security::Signer was sent to initialize.
|
123
|
-
|
124
|
-
def add_signatures
|
125
|
-
if @data_signature then
|
126
|
-
@tar_writer.add_file 'data.tar.gz.sig', 0644 do |io|
|
127
|
-
io.write @data_signature
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
if @meta_signature then
|
132
|
-
@tar_writer.add_file 'metadata.gz.sig', 0644 do |io|
|
133
|
-
io.write @meta_signature
|
134
|
-
end
|
135
|
-
end
|
136
|
-
end
|
137
|
-
|
138
|
-
##
|
139
|
-
# Closes the TarOutput.
|
140
|
-
|
141
|
-
def close
|
142
|
-
@tar_writer.close
|
143
|
-
end
|
144
|
-
|
145
|
-
end
|
146
|
-
|
@@ -1,18 +0,0 @@
|
|
1
|
-
require 'rubygems'
|
2
|
-
|
3
|
-
# TODO: remove after 1.9.1 dropped
|
4
|
-
module Gem::RequirePathsBuilder
|
5
|
-
def write_require_paths_file_if_needed(spec = @spec, gem_home = @gem_home)
|
6
|
-
return if spec.require_paths == ["lib"] &&
|
7
|
-
(spec.bindir.nil? || spec.bindir == "bin")
|
8
|
-
file_name = File.join(gem_home, 'gems', "#{@spec.full_name}", ".require_paths")
|
9
|
-
file_name.untaint
|
10
|
-
File.open(file_name, "w") do |file|
|
11
|
-
spec.require_paths.each do |path|
|
12
|
-
file.puts path
|
13
|
-
end
|
14
|
-
file.puts spec.bindir if spec.bindir
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end if Gem::QUICKLOADER_SUCKAGE
|
18
|
-
|
@@ -1,406 +0,0 @@
|
|
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/specification'
|
8
|
-
require 'rubygems/deprecate'
|
9
|
-
|
10
|
-
##
|
11
|
-
# The SourceIndex object indexes all the gems available from a
|
12
|
-
# particular source (e.g. a list of gem directories, or a remote
|
13
|
-
# source). A SourceIndex maps a gem full name to a gem
|
14
|
-
# specification.
|
15
|
-
#
|
16
|
-
# NOTE:: The class used to be named Cache, but that became
|
17
|
-
# confusing when cached source fetchers where introduced. The
|
18
|
-
# constant Gem::Cache is an alias for this class to allow old
|
19
|
-
# YAMLized source index objects to load properly.
|
20
|
-
|
21
|
-
class Gem::SourceIndex
|
22
|
-
|
23
|
-
include Enumerable
|
24
|
-
|
25
|
-
attr_reader :gems # :nodoc:
|
26
|
-
|
27
|
-
##
|
28
|
-
# Directories to use to refresh this SourceIndex when calling refresh!
|
29
|
-
|
30
|
-
attr_accessor :spec_dirs
|
31
|
-
|
32
|
-
##
|
33
|
-
# Factory method to construct a source index instance for a given
|
34
|
-
# path.
|
35
|
-
#
|
36
|
-
# deprecated::
|
37
|
-
# If supplied, from_installed_gems will act just like
|
38
|
-
# +from_gems_in+. This argument is deprecated and is provided
|
39
|
-
# just for backwards compatibility, and should not generally
|
40
|
-
# be used.
|
41
|
-
#
|
42
|
-
# return::
|
43
|
-
# SourceIndex instance
|
44
|
-
|
45
|
-
def self.from_installed_gems(*deprecated)
|
46
|
-
if deprecated.empty?
|
47
|
-
from_gems_in(*installed_spec_directories)
|
48
|
-
else
|
49
|
-
warn "NOTE: from_installed_gems(arg) is deprecated. From #{caller.first}"
|
50
|
-
from_gems_in(*deprecated) # HACK warn
|
51
|
-
end
|
52
|
-
end
|
53
|
-
|
54
|
-
##
|
55
|
-
# Returns a list of directories from Gem.path that contain specifications.
|
56
|
-
|
57
|
-
def self.installed_spec_directories
|
58
|
-
# TODO: move to Gem::Utils
|
59
|
-
Gem.path.collect { |dir| File.join(dir, "specifications") }
|
60
|
-
end
|
61
|
-
|
62
|
-
##
|
63
|
-
# Creates a new SourceIndex from the ruby format gem specifications in
|
64
|
-
# +spec_dirs+.
|
65
|
-
|
66
|
-
def self.from_gems_in(*spec_dirs)
|
67
|
-
new spec_dirs
|
68
|
-
end
|
69
|
-
|
70
|
-
##
|
71
|
-
# Loads a ruby-format specification from +file_name+ and returns the
|
72
|
-
# loaded spec.
|
73
|
-
|
74
|
-
def self.load_specification(file_name)
|
75
|
-
Gem::Deprecate.skip_during do
|
76
|
-
Gem::Specification.load Gem::Path.new(file_name)
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
##
|
81
|
-
# Constructs a source index instance from the provided specifications, which
|
82
|
-
# is a Hash of gem full names and Gem::Specifications.
|
83
|
-
|
84
|
-
def initialize specs_or_dirs = []
|
85
|
-
@gems = {}
|
86
|
-
@spec_dirs = nil
|
87
|
-
|
88
|
-
case specs_or_dirs
|
89
|
-
when Hash then
|
90
|
-
specs_or_dirs.each do |full_name, spec|
|
91
|
-
add_spec spec
|
92
|
-
end
|
93
|
-
when Array, String then
|
94
|
-
self.spec_dirs = Array(specs_or_dirs)
|
95
|
-
refresh!
|
96
|
-
else
|
97
|
-
arg = specs_or_dirs.inspect
|
98
|
-
warn "NOTE: SourceIndex.new(#{arg}) is deprecated; From #{caller.first}."
|
99
|
-
end
|
100
|
-
end
|
101
|
-
|
102
|
-
def all_gems
|
103
|
-
gems
|
104
|
-
end
|
105
|
-
|
106
|
-
def prerelease_gems
|
107
|
-
@gems.reject { |name, gem| !gem.version.prerelease? }
|
108
|
-
end
|
109
|
-
|
110
|
-
def released_gems
|
111
|
-
@gems.reject { |name, gem| gem.version.prerelease? }
|
112
|
-
end
|
113
|
-
|
114
|
-
##
|
115
|
-
# Reconstruct the source index from the specifications in +spec_dirs+.
|
116
|
-
|
117
|
-
def load_gems_in(*spec_dirs)
|
118
|
-
@gems.clear
|
119
|
-
|
120
|
-
spec_dirs.reverse_each do |spec_dir|
|
121
|
-
spec_files = Dir[File.join(spec_dir, "*.gemspec")]
|
122
|
-
|
123
|
-
spec_files.each do |spec_file|
|
124
|
-
gemspec = Gem::Deprecate.skip_during do
|
125
|
-
Gem::Specification.load spec_file
|
126
|
-
end
|
127
|
-
add_spec gemspec if gemspec
|
128
|
-
end
|
129
|
-
end
|
130
|
-
|
131
|
-
self
|
132
|
-
end
|
133
|
-
|
134
|
-
##
|
135
|
-
# Returns an Array specifications for the latest released versions
|
136
|
-
# of each gem in this index.
|
137
|
-
|
138
|
-
def latest_specs(include_prerelease=false)
|
139
|
-
result = Hash.new { |h,k| h[k] = [] }
|
140
|
-
latest = {}
|
141
|
-
|
142
|
-
sort.each do |_, spec|
|
143
|
-
name = spec.name
|
144
|
-
curr_ver = spec.version
|
145
|
-
prev_ver = latest.key?(name) ? latest[name].version : nil
|
146
|
-
|
147
|
-
next if !include_prerelease && curr_ver.prerelease?
|
148
|
-
next unless prev_ver.nil? or curr_ver >= prev_ver or
|
149
|
-
latest[name].platform != Gem::Platform::RUBY
|
150
|
-
|
151
|
-
if prev_ver.nil? or
|
152
|
-
(curr_ver > prev_ver and spec.platform == Gem::Platform::RUBY) then
|
153
|
-
result[name].clear
|
154
|
-
latest[name] = spec
|
155
|
-
end
|
156
|
-
|
157
|
-
if spec.platform != Gem::Platform::RUBY then
|
158
|
-
result[name].delete_if do |result_spec|
|
159
|
-
result_spec.platform == spec.platform
|
160
|
-
end
|
161
|
-
end
|
162
|
-
|
163
|
-
result[name] << spec
|
164
|
-
end
|
165
|
-
|
166
|
-
result.values.flatten
|
167
|
-
end
|
168
|
-
|
169
|
-
##
|
170
|
-
# An array including only the prerelease gemspecs
|
171
|
-
|
172
|
-
def prerelease_specs
|
173
|
-
prerelease_gems.values
|
174
|
-
end
|
175
|
-
|
176
|
-
##
|
177
|
-
# An array including only the released gemspecs
|
178
|
-
|
179
|
-
def released_specs
|
180
|
-
released_gems.values
|
181
|
-
end
|
182
|
-
|
183
|
-
##
|
184
|
-
# Add a gem specification to the source index.
|
185
|
-
|
186
|
-
def add_spec(gem_spec, name = gem_spec.full_name)
|
187
|
-
# No idea why, but the Indexer wants to insert them using original_name
|
188
|
-
# instead of full_name. So we make it an optional arg.
|
189
|
-
@gems[name] = gem_spec
|
190
|
-
end
|
191
|
-
|
192
|
-
##
|
193
|
-
# Add gem specifications to the source index.
|
194
|
-
|
195
|
-
def add_specs(*gem_specs)
|
196
|
-
Gem::Deprecate.skip_during do
|
197
|
-
gem_specs.each do |spec|
|
198
|
-
add_spec spec
|
199
|
-
end
|
200
|
-
end
|
201
|
-
end
|
202
|
-
|
203
|
-
##
|
204
|
-
# Remove a gem specification named +full_name+.
|
205
|
-
|
206
|
-
def remove_spec(full_name)
|
207
|
-
@gems.delete full_name
|
208
|
-
end
|
209
|
-
|
210
|
-
##
|
211
|
-
# Iterate over the specifications in the source index.
|
212
|
-
|
213
|
-
def each(&block) # :yields: gem.full_name, gem
|
214
|
-
@gems.each(&block)
|
215
|
-
end
|
216
|
-
|
217
|
-
##
|
218
|
-
# The gem specification given a full gem spec name.
|
219
|
-
|
220
|
-
def specification(full_name)
|
221
|
-
@gems[full_name]
|
222
|
-
end
|
223
|
-
|
224
|
-
##
|
225
|
-
# The signature for the source index. Changes in the signature indicate a
|
226
|
-
# change in the index.
|
227
|
-
|
228
|
-
def index_signature
|
229
|
-
require 'digest'
|
230
|
-
|
231
|
-
Digest::SHA256.new.hexdigest(@gems.keys.sort.join(',')).to_s
|
232
|
-
end
|
233
|
-
|
234
|
-
##
|
235
|
-
# The signature for the given gem specification.
|
236
|
-
|
237
|
-
def gem_signature(gem_full_name)
|
238
|
-
require 'digest'
|
239
|
-
|
240
|
-
Digest::SHA256.new.hexdigest(@gems[gem_full_name].to_yaml).to_s
|
241
|
-
end
|
242
|
-
|
243
|
-
def size
|
244
|
-
@gems.size
|
245
|
-
end
|
246
|
-
alias length size
|
247
|
-
|
248
|
-
##
|
249
|
-
# Find a gem by an exact match on the short name.
|
250
|
-
|
251
|
-
def find_name(gem_name, requirement = Gem::Requirement.default)
|
252
|
-
dep = Gem::Dependency.new gem_name, requirement
|
253
|
-
|
254
|
-
Gem::Deprecate.skip_during do
|
255
|
-
search dep
|
256
|
-
end
|
257
|
-
end
|
258
|
-
|
259
|
-
##
|
260
|
-
# Search for a gem by Gem::Dependency +gem_pattern+. If +only_platform+
|
261
|
-
# is true, only gems matching Gem::Platform.local will be returned. An
|
262
|
-
# Array of matching Gem::Specification objects is returned.
|
263
|
-
#
|
264
|
-
# For backwards compatibility, a String or Regexp pattern may be passed as
|
265
|
-
# +gem_pattern+, and a Gem::Requirement for +platform_only+. This
|
266
|
-
# behavior is deprecated and will be removed.
|
267
|
-
|
268
|
-
def search(gem_pattern, platform_or_requirement = false)
|
269
|
-
requirement = nil
|
270
|
-
only_platform = false # FIX: WTF is this?!?
|
271
|
-
|
272
|
-
# TODO - Remove support and warning for legacy arguments after 2008/11
|
273
|
-
unless Gem::Dependency === gem_pattern
|
274
|
-
warn "#{Gem.location_of_caller.join ':'}:Warning: Gem::SourceIndex#search support for #{gem_pattern.class} patterns is deprecated, use #find_name"
|
275
|
-
end
|
276
|
-
|
277
|
-
case gem_pattern
|
278
|
-
when Regexp then
|
279
|
-
requirement = platform_or_requirement || Gem::Requirement.default
|
280
|
-
when Gem::Dependency then
|
281
|
-
only_platform = platform_or_requirement
|
282
|
-
requirement = gem_pattern.requirement
|
283
|
-
|
284
|
-
gem_pattern = if Regexp === gem_pattern.name then
|
285
|
-
gem_pattern.name
|
286
|
-
elsif gem_pattern.name.empty? then
|
287
|
-
//
|
288
|
-
else
|
289
|
-
/^#{Regexp.escape gem_pattern.name}$/
|
290
|
-
end
|
291
|
-
else
|
292
|
-
requirement = platform_or_requirement || Gem::Requirement.default
|
293
|
-
gem_pattern = /#{gem_pattern}/i
|
294
|
-
end
|
295
|
-
|
296
|
-
unless Gem::Requirement === requirement then
|
297
|
-
requirement = Gem::Requirement.create requirement
|
298
|
-
end
|
299
|
-
|
300
|
-
specs = @gems.values.select do |spec|
|
301
|
-
spec.name =~ gem_pattern and
|
302
|
-
requirement.satisfied_by? spec.version
|
303
|
-
end
|
304
|
-
|
305
|
-
if only_platform then
|
306
|
-
specs = specs.select do |spec|
|
307
|
-
Gem::Platform.match spec.platform
|
308
|
-
end
|
309
|
-
end
|
310
|
-
|
311
|
-
specs.sort_by { |s| s.sort_obj }
|
312
|
-
end
|
313
|
-
|
314
|
-
##
|
315
|
-
# Replaces the gems in the source index from specifications in the
|
316
|
-
# directories this source index was created from. Raises an exception if
|
317
|
-
# this source index wasn't created from a directory (via from_gems_in or
|
318
|
-
# from_installed_gems, or having spec_dirs set).
|
319
|
-
|
320
|
-
def refresh!
|
321
|
-
raise 'source index not created from disk' if @spec_dirs.nil?
|
322
|
-
load_gems_in(*@spec_dirs)
|
323
|
-
end
|
324
|
-
|
325
|
-
##
|
326
|
-
# Returns an Array of Gem::Specifications that are not up to date.
|
327
|
-
|
328
|
-
def outdated
|
329
|
-
outdateds = []
|
330
|
-
|
331
|
-
latest_specs.each do |local|
|
332
|
-
dependency = Gem::Dependency.new local.name, ">= #{local.version}"
|
333
|
-
|
334
|
-
fetcher = Gem::SpecFetcher.fetcher
|
335
|
-
remotes = fetcher.find_matching dependency
|
336
|
-
remotes = remotes.map { |(_, version, _), _| version }
|
337
|
-
|
338
|
-
latest = remotes.sort.last
|
339
|
-
|
340
|
-
outdateds << local.name if latest and local.version < latest
|
341
|
-
end
|
342
|
-
|
343
|
-
outdateds
|
344
|
-
end
|
345
|
-
|
346
|
-
def ==(other) # :nodoc:
|
347
|
-
self.class === other and @gems == other.gems
|
348
|
-
end
|
349
|
-
|
350
|
-
def dump
|
351
|
-
Marshal.dump(self)
|
352
|
-
end
|
353
|
-
end
|
354
|
-
|
355
|
-
# :stopdoc:
|
356
|
-
module Gem
|
357
|
-
|
358
|
-
##
|
359
|
-
# Cache is an alias for SourceIndex to allow older YAMLized source index
|
360
|
-
# objects to load properly.
|
361
|
-
|
362
|
-
Cache = SourceIndex
|
363
|
-
|
364
|
-
end
|
365
|
-
|
366
|
-
class Gem::SourceIndex
|
367
|
-
extend Gem::Deprecate
|
368
|
-
|
369
|
-
deprecate :all_gems, :none, 2011, 10
|
370
|
-
|
371
|
-
deprecate :==, :none, 2011, 11 # noisy
|
372
|
-
deprecate :add_specs, :none, 2011, 11 # noisy
|
373
|
-
deprecate :each, :none, 2011, 11
|
374
|
-
deprecate :gems, :none, 2011, 11
|
375
|
-
deprecate :load_gems_in, :none, 2011, 11
|
376
|
-
deprecate :refresh!, :none, 2011, 11
|
377
|
-
deprecate :spec_dirs=, "Specification.dirs=", 2011, 11 # noisy
|
378
|
-
deprecate :add_spec, "Specification.add_spec", 2011, 11
|
379
|
-
deprecate :find_name, "Specification.find_by_name", 2011, 11
|
380
|
-
deprecate :gem_signature, :none, 2011, 11
|
381
|
-
deprecate :index_signature, :none, 2011, 11
|
382
|
-
deprecate :initialize, :none, 2011, 11
|
383
|
-
deprecate :latest_specs, "Specification.latest_specs", 2011, 11
|
384
|
-
deprecate :length, "Specification.all.length", 2011, 11
|
385
|
-
deprecate :outdated, :none, 2011, 11
|
386
|
-
deprecate :prerelease_gems, :none, 2011, 11
|
387
|
-
deprecate :prerelease_specs, :none, 2011, 11
|
388
|
-
deprecate :released_gems, :none, 2011, 11
|
389
|
-
deprecate :released_specs, :none, 2011, 11
|
390
|
-
deprecate :remove_spec, "Specification.remove_spec", 2011, 11
|
391
|
-
deprecate :search, :none, 2011, 11
|
392
|
-
deprecate :size, "Specification.all.size", 2011, 11
|
393
|
-
deprecate :spec_dirs, "Specification.dirs", 2011, 11
|
394
|
-
deprecate :specification, "Specification.find", 2011, 11
|
395
|
-
|
396
|
-
class << self
|
397
|
-
extend Gem::Deprecate
|
398
|
-
|
399
|
-
deprecate :from_gems_in, :none, 2011, 10
|
400
|
-
deprecate :from_installed_gems, :none, 2011, 10
|
401
|
-
deprecate :installed_spec_directories, "Specification.dirs", 2011, 11
|
402
|
-
deprecate :load_specification, :none, 2011, 10
|
403
|
-
end
|
404
|
-
end
|
405
|
-
|
406
|
-
# :startdoc:
|