rubygems-update 3.3.22 → 3.3.24
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +25 -0
- data/Manifest.txt +1 -1
- data/POLICIES.md +38 -5
- data/bundler/CHANGELOG.md +29 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/init.rb +5 -1
- data/bundler/lib/bundler/definition.rb +12 -40
- data/bundler/lib/bundler/dsl.rb +0 -1
- data/bundler/lib/bundler/endpoint_specification.rb +4 -0
- data/bundler/lib/bundler/gem_helpers.rb +0 -1
- data/bundler/lib/bundler/gem_version_promoter.rb +6 -7
- data/bundler/lib/bundler/index.rb +3 -27
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/lazy_specification.rb +7 -11
- data/bundler/lib/bundler/remote_specification.rb +6 -2
- data/bundler/lib/bundler/resolver/base.rb +1 -1
- data/bundler/lib/bundler/resolver/spec_group.rb +22 -44
- data/bundler/lib/bundler/resolver.rb +31 -76
- data/bundler/lib/bundler/rubygems_ext.rb +12 -1
- data/bundler/lib/bundler/shared_helpers.rb +1 -2
- data/bundler/lib/bundler/spec_set.rb +1 -1
- data/bundler/lib/bundler/templates/newgem/gitlab-ci.yml.tt +5 -4
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +0 -1
- data/lib/rubygems/gemcutter_utilities.rb +8 -1
- data/lib/rubygems/package.rb +9 -4
- data/lib/rubygems/platform.rb +17 -1
- data/lib/rubygems/resolver.rb +1 -1
- data/lib/rubygems.rb +1 -1
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/alternate_cert.pem +14 -14
- data/test/rubygems/alternate_cert_32.pem +15 -15
- data/test/rubygems/alternate_key.pem +25 -25
- data/test/rubygems/child_cert.pem +15 -16
- data/test/rubygems/child_cert_32.pem +15 -16
- data/test/rubygems/child_key.pem +25 -25
- data/test/rubygems/encrypted_private_key.pem +26 -26
- data/test/rubygems/expired_cert.pem +15 -15
- data/test/rubygems/future_cert.pem +15 -15
- data/test/rubygems/future_cert_32.pem +15 -15
- data/test/rubygems/grandchild_cert.pem +15 -16
- data/test/rubygems/grandchild_cert_32.pem +15 -16
- data/test/rubygems/grandchild_key.pem +25 -25
- data/test/rubygems/helper.rb +23 -17
- data/test/rubygems/invalid_issuer_cert.pem +16 -16
- data/test/rubygems/invalid_issuer_cert_32.pem +16 -16
- data/test/rubygems/invalid_key.pem +25 -25
- data/test/rubygems/invalid_signer_cert.pem +15 -15
- data/test/rubygems/invalid_signer_cert_32.pem +15 -15
- data/test/rubygems/invalidchild_cert.pem +15 -16
- data/test/rubygems/invalidchild_cert_32.pem +15 -16
- data/test/rubygems/invalidchild_key.pem +25 -25
- data/test/rubygems/packages/Bluebie-legs-0.6.2.gem +0 -0
- data/test/rubygems/private_key.pem +25 -25
- data/test/rubygems/public_cert.pem +16 -16
- data/test/rubygems/public_cert_32.pem +15 -15
- data/test/rubygems/public_key.pem +7 -7
- data/test/rubygems/test_gem.rb +254 -212
- data/test/rubygems/test_gem_commands_owner_command.rb +105 -24
- data/test/rubygems/test_gem_commands_push_command.rb +44 -23
- data/test/rubygems/test_gem_commands_signin_command.rb +28 -3
- data/test/rubygems/test_gem_commands_yank_command.rb +9 -9
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/custom_name/Cargo.toml +1 -1
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.lock +4 -4
- data/test/rubygems/test_gem_ext_cargo_builder/rust_ruby_example/Cargo.toml +1 -1
- data/test/rubygems/test_gem_gemcutter_utilities.rb +16 -12
- data/test/rubygems/test_gem_package.rb +15 -0
- data/test/rubygems/test_gem_platform.rb +35 -0
- data/test/rubygems/test_gem_resolver.rb +33 -0
- data/test/rubygems/test_gem_security.rb +5 -5
- data/test/rubygems/test_gem_security_signer.rb +6 -6
- data/test/rubygems/test_require.rb +5 -5
- data/test/rubygems/utilities.rb +36 -14
- data/test/rubygems/wrong_key_cert.pem +15 -15
- data/test/rubygems/wrong_key_cert_32.pem +15 -15
- metadata +4 -4
- data/bundler/lib/bundler/dep_proxy.rb +0 -55
|
@@ -8,22 +8,6 @@ module Bundler
|
|
|
8
8
|
|
|
9
9
|
include GemHelpers
|
|
10
10
|
|
|
11
|
-
# Figures out the best possible configuration of gems that satisfies
|
|
12
|
-
# the list of passed dependencies and any child dependencies without
|
|
13
|
-
# causing any gem activation errors.
|
|
14
|
-
#
|
|
15
|
-
# ==== Parameters
|
|
16
|
-
# *dependencies<Gem::Dependency>:: The list of dependencies to resolve
|
|
17
|
-
#
|
|
18
|
-
# ==== Returns
|
|
19
|
-
# <GemBundle>,nil:: If the list of dependencies can be resolved, a
|
|
20
|
-
# collection of gemspecs is returned. Otherwise, nil is returned.
|
|
21
|
-
def self.resolve(requirements, source_requirements = {}, base = [], gem_version_promoter = GemVersionPromoter.new, additional_base_requirements = [], platforms = nil)
|
|
22
|
-
base = SpecSet.new(base) unless base.is_a?(SpecSet)
|
|
23
|
-
resolver = new(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
|
|
24
|
-
resolver.start(requirements)
|
|
25
|
-
end
|
|
26
|
-
|
|
27
11
|
def initialize(source_requirements, base, gem_version_promoter, additional_base_requirements, platforms)
|
|
28
12
|
@source_requirements = source_requirements
|
|
29
13
|
@base = Resolver::Base.new(base, additional_base_requirements)
|
|
@@ -42,8 +26,7 @@ module Bundler
|
|
|
42
26
|
remove_from_candidates(spec)
|
|
43
27
|
end
|
|
44
28
|
|
|
45
|
-
|
|
46
|
-
requirements.each {|dep| @prerelease_specified[dep.name] ||= dep.prerelease? }
|
|
29
|
+
requirements.each {|dep| prerelease_specified[dep.name] ||= dep.prerelease? }
|
|
47
30
|
|
|
48
31
|
verify_gemfile_dependencies_are_found!(requirements)
|
|
49
32
|
result = @resolver.resolve(requirements).
|
|
@@ -117,48 +100,35 @@ module Bundler
|
|
|
117
100
|
specification.dependencies_for_activated_platforms
|
|
118
101
|
end
|
|
119
102
|
|
|
120
|
-
def search_for(
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
name = dependency.name
|
|
124
|
-
@search_for[dependency_proxy] ||= begin
|
|
103
|
+
def search_for(dependency)
|
|
104
|
+
@search_for[dependency] ||= begin
|
|
105
|
+
name = dependency.name
|
|
125
106
|
locked_results = @base[name].select {|spec| requirement_satisfied_by?(dependency, nil, spec) }
|
|
126
107
|
locked_requirement = base_requirements[name]
|
|
127
108
|
results = results_for(dependency) + locked_results
|
|
128
109
|
results = results.select {|spec| requirement_satisfied_by?(locked_requirement, nil, spec) } if locked_requirement
|
|
110
|
+
dep_platforms = dependency.gem_platforms(@platforms)
|
|
129
111
|
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
pre, results = results.partition {|spec| spec.version.prerelease? }
|
|
134
|
-
results = pre + results
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
if results.any?
|
|
138
|
-
results = @gem_version_promoter.sort_versions(dependency, results)
|
|
139
|
-
|
|
140
|
-
results.group_by(&:version).reduce([]) do |groups, (_, specs)|
|
|
141
|
-
next groups unless specs.any? {|spec| spec.match_platform(platform) }
|
|
112
|
+
@gem_version_promoter.sort_versions(dependency, results).group_by(&:version).reduce([]) do |groups, (_, specs)|
|
|
113
|
+
relevant_platforms = dep_platforms.select {|platform| specs.any? {|spec| spec.match_platform(platform) } }
|
|
114
|
+
next groups unless relevant_platforms.any?
|
|
142
115
|
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
116
|
+
ruby_specs = select_best_platform_match(specs, Gem::Platform::RUBY)
|
|
117
|
+
if ruby_specs.any?
|
|
118
|
+
spec_group_ruby = SpecGroup.new(ruby_specs, [Gem::Platform::RUBY])
|
|
119
|
+
spec_group_ruby.force_ruby_platform = dependency.force_ruby_platform
|
|
120
|
+
groups << spec_group_ruby
|
|
121
|
+
end
|
|
146
122
|
|
|
147
|
-
|
|
148
|
-
if spec_group_ruby
|
|
149
|
-
spec_group_ruby.force_ruby_platform = dependency.force_ruby_platform
|
|
150
|
-
groups << spec_group_ruby
|
|
151
|
-
end
|
|
123
|
+
next groups if @resolving_only_for_ruby || dependency.force_ruby_platform
|
|
152
124
|
|
|
153
|
-
|
|
125
|
+
platform_specs = relevant_platforms.flat_map {|platform| select_best_platform_match(specs, platform) }
|
|
126
|
+
next groups if platform_specs == ruby_specs
|
|
154
127
|
|
|
155
|
-
|
|
156
|
-
|
|
128
|
+
spec_group = SpecGroup.new(platform_specs, relevant_platforms)
|
|
129
|
+
groups << spec_group
|
|
157
130
|
|
|
158
|
-
|
|
159
|
-
end
|
|
160
|
-
else
|
|
161
|
-
[]
|
|
131
|
+
groups
|
|
162
132
|
end
|
|
163
133
|
end
|
|
164
134
|
end
|
|
@@ -189,10 +159,6 @@ module Bundler
|
|
|
189
159
|
requirement.matches_spec?(spec) || spec.source.is_a?(Source::Gemspec)
|
|
190
160
|
end
|
|
191
161
|
|
|
192
|
-
def dependencies_equal?(dependencies, other_dependencies)
|
|
193
|
-
dependencies.map(&:dep) == other_dependencies.map(&:dep)
|
|
194
|
-
end
|
|
195
|
-
|
|
196
162
|
def sort_dependencies(dependencies, activated, conflicts)
|
|
197
163
|
dependencies.sort_by do |dependency|
|
|
198
164
|
name = name_for(dependency)
|
|
@@ -204,23 +170,20 @@ module Bundler
|
|
|
204
170
|
amount_constrained(dependency),
|
|
205
171
|
conflicts[name] ? 0 : 1,
|
|
206
172
|
vertex.payload ? 0 : search_for(dependency).count,
|
|
207
|
-
self.class.platform_sort_key(dependency.__platform),
|
|
208
173
|
]
|
|
209
174
|
end
|
|
210
175
|
end
|
|
211
176
|
|
|
212
|
-
def self.platform_sort_key(platform)
|
|
213
|
-
# Prefer specific platform to not specific platform
|
|
214
|
-
return ["99-LAST", "", "", ""] if Gem::Platform::RUBY == platform
|
|
215
|
-
["00", *platform.to_a.map {|part| part || "" }]
|
|
216
|
-
end
|
|
217
|
-
|
|
218
177
|
private
|
|
219
178
|
|
|
220
179
|
def base_requirements
|
|
221
180
|
@base.base_requirements
|
|
222
181
|
end
|
|
223
182
|
|
|
183
|
+
def prerelease_specified
|
|
184
|
+
@gem_version_promoter.prerelease_specified
|
|
185
|
+
end
|
|
186
|
+
|
|
224
187
|
def remove_from_candidates(spec)
|
|
225
188
|
@base.delete(spec)
|
|
226
189
|
|
|
@@ -255,7 +218,7 @@ module Bundler
|
|
|
255
218
|
all - 1_000_000
|
|
256
219
|
else
|
|
257
220
|
search = search_for(dependency)
|
|
258
|
-
search =
|
|
221
|
+
search = prerelease_specified[dependency.name] ? search.count : search.count {|s| !s.version.prerelease? }
|
|
259
222
|
search - all
|
|
260
223
|
end
|
|
261
224
|
end
|
|
@@ -265,26 +228,16 @@ module Bundler
|
|
|
265
228
|
requirements.map! do |requirement|
|
|
266
229
|
name = requirement.name
|
|
267
230
|
next requirement if name == "bundler"
|
|
231
|
+
next if requirement.gem_platforms(@platforms).empty?
|
|
268
232
|
next requirement unless search_for(requirement).empty?
|
|
269
233
|
next unless requirement.current_platform?
|
|
270
234
|
|
|
271
|
-
|
|
272
|
-
version = base.first.version
|
|
273
|
-
message = "You have requested:\n" \
|
|
274
|
-
" #{name} #{requirement.requirement}\n\n" \
|
|
275
|
-
"The bundle currently has #{name} locked at #{version}.\n" \
|
|
276
|
-
"Try running `bundle update #{name}`\n\n" \
|
|
277
|
-
"If you are updating multiple gems in your Gemfile at once,\n" \
|
|
278
|
-
"try passing them all to `bundle update`"
|
|
279
|
-
else
|
|
280
|
-
message = gem_not_found_message(name, requirement, source_for(name))
|
|
281
|
-
end
|
|
282
|
-
raise GemNotFound, message
|
|
235
|
+
raise GemNotFound, gem_not_found_message(name, requirement, source_for(name))
|
|
283
236
|
end.compact!
|
|
284
237
|
end
|
|
285
238
|
|
|
286
239
|
def gem_not_found_message(name, requirement, source, extra_message = "")
|
|
287
|
-
specs = source.specs.search(name)
|
|
240
|
+
specs = source.specs.search(name).sort_by {|s| [s.version, s.platform.to_s] }
|
|
288
241
|
matching_part = name
|
|
289
242
|
requirement_label = SharedHelpers.pretty_dependency(requirement)
|
|
290
243
|
cache_message = begin
|
|
@@ -297,7 +250,9 @@ module Bundler
|
|
|
297
250
|
if specs_matching_requirement.any?
|
|
298
251
|
specs = specs_matching_requirement
|
|
299
252
|
matching_part = requirement_label
|
|
300
|
-
|
|
253
|
+
platforms = requirement.gem_platforms(@platforms)
|
|
254
|
+
platform_label = platforms.size == 1 ? "platform '#{platforms.first}" : "platforms '#{platforms.join("', '")}"
|
|
255
|
+
requirement_label = "#{requirement_label}' with #{platform_label}"
|
|
301
256
|
end
|
|
302
257
|
|
|
303
258
|
message = String.new("Could not find gem '#{requirement_label}'#{extra_message} in #{source}#{cache_message}.\n")
|
|
@@ -261,10 +261,21 @@ module Gem
|
|
|
261
261
|
# version
|
|
262
262
|
(
|
|
263
263
|
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
|
|
264
|
-
(@os == "linux" && (other.
|
|
264
|
+
(@os == "linux" && (normalized_linux_version_ext == other.normalized_linux_version_ext || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
|
|
265
265
|
@version == other.version
|
|
266
266
|
)
|
|
267
267
|
end
|
|
268
|
+
|
|
269
|
+
# This is a copy of RubyGems 3.3.23 or higher `normalized_linux_method`.
|
|
270
|
+
# Once only 3.3.23 is supported, we can use the method in RubyGems.
|
|
271
|
+
def normalized_linux_version_ext
|
|
272
|
+
return nil unless @version
|
|
273
|
+
|
|
274
|
+
without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
|
|
275
|
+
return nil if without_gnu_nor_abi_modifiers.empty?
|
|
276
|
+
|
|
277
|
+
without_gnu_nor_abi_modifiers
|
|
278
|
+
end
|
|
268
279
|
end
|
|
269
280
|
end
|
|
270
281
|
|
|
@@ -163,7 +163,7 @@ module Bundler
|
|
|
163
163
|
"\nEither installing with `--full-index` or running `bundle update #{spec.name}` should fix the problem."
|
|
164
164
|
end
|
|
165
165
|
|
|
166
|
-
def pretty_dependency(dep
|
|
166
|
+
def pretty_dependency(dep)
|
|
167
167
|
msg = String.new(dep.name)
|
|
168
168
|
msg << " (#{dep.requirement})" unless dep.requirement == Gem::Requirement.default
|
|
169
169
|
|
|
@@ -172,7 +172,6 @@ module Bundler
|
|
|
172
172
|
msg << " " << platform_string if !platform_string.empty? && platform_string != Gem::Platform::RUBY
|
|
173
173
|
end
|
|
174
174
|
|
|
175
|
-
msg << " from the `#{dep.source}` source" if print_source && dep.source
|
|
176
175
|
msg
|
|
177
176
|
end
|
|
178
177
|
|
|
@@ -1,8 +1,9 @@
|
|
|
1
|
-
|
|
1
|
+
default:
|
|
2
|
+
image: ruby:<%= RUBY_VERSION %>
|
|
2
3
|
|
|
3
|
-
before_script:
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
before_script:
|
|
5
|
+
- gem install bundler -v <%= Bundler::VERSION %>
|
|
6
|
+
- bundle install
|
|
6
7
|
|
|
7
8
|
example_job:
|
|
8
9
|
script:
|
data/bundler/lib/bundler.rb
CHANGED
|
@@ -41,7 +41,6 @@ module Bundler
|
|
|
41
41
|
|
|
42
42
|
autoload :Definition, File.expand_path("bundler/definition", __dir__)
|
|
43
43
|
autoload :Dependency, File.expand_path("bundler/dependency", __dir__)
|
|
44
|
-
autoload :DepProxy, File.expand_path("bundler/dep_proxy", __dir__)
|
|
45
44
|
autoload :Deprecate, File.expand_path("bundler/deprecate", __dir__)
|
|
46
45
|
autoload :Digest, File.expand_path("bundler/digest", __dir__)
|
|
47
46
|
autoload :Dsl, File.expand_path("bundler/dsl", __dir__)
|
|
@@ -201,7 +201,8 @@ module Gem::GemcutterUtilities
|
|
|
201
201
|
# block was given or shows the response body to the user.
|
|
202
202
|
#
|
|
203
203
|
# If the response was not successful, shows an error to the user including
|
|
204
|
-
# the +error_prefix+ and the response body.
|
|
204
|
+
# the +error_prefix+ and the response body. If the response was a permanent redirect,
|
|
205
|
+
# shows an error to the user including the redirect location.
|
|
205
206
|
|
|
206
207
|
def with_response(response, error_prefix = nil)
|
|
207
208
|
case response
|
|
@@ -211,6 +212,12 @@ module Gem::GemcutterUtilities
|
|
|
211
212
|
else
|
|
212
213
|
say clean_text(response.body)
|
|
213
214
|
end
|
|
215
|
+
when Net::HTTPPermanentRedirect, Net::HTTPRedirection then
|
|
216
|
+
message = "The request has redirected permanently to #{response['location']}. Please check your defined push host URL."
|
|
217
|
+
message = "#{error_prefix}: #{message}" if error_prefix
|
|
218
|
+
|
|
219
|
+
say clean_text(message)
|
|
220
|
+
terminate_interaction(ERROR_CODE)
|
|
214
221
|
else
|
|
215
222
|
message = response.body
|
|
216
223
|
message = "#{error_prefix}: #{message}" if error_prefix
|
data/lib/rubygems/package.rb
CHANGED
|
@@ -444,10 +444,10 @@ EOM
|
|
|
444
444
|
directories << mkdir
|
|
445
445
|
end
|
|
446
446
|
|
|
447
|
-
|
|
448
|
-
out.write entry.read
|
|
447
|
+
if entry.file?
|
|
448
|
+
File.open(destination, "wb") {|out| out.write entry.read }
|
|
449
449
|
FileUtils.chmod file_mode(entry.header.mode), destination
|
|
450
|
-
end
|
|
450
|
+
end
|
|
451
451
|
|
|
452
452
|
verbose destination
|
|
453
453
|
end
|
|
@@ -467,7 +467,12 @@ EOM
|
|
|
467
467
|
end
|
|
468
468
|
|
|
469
469
|
def file_mode(mode) # :nodoc:
|
|
470
|
-
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
|
470
|
+
((mode & 0111).zero? ? data_mode : prog_mode) ||
|
|
471
|
+
# If we're not using one of the default modes, then we're going to fall
|
|
472
|
+
# back to the mode from the tarball. In this case we need to mask it down
|
|
473
|
+
# to fit into 2^16 bits (the maximum value for a mode in CRuby since it
|
|
474
|
+
# gets put into an unsigned short).
|
|
475
|
+
(mode & ((1 << 16) - 1))
|
|
471
476
|
end
|
|
472
477
|
|
|
473
478
|
##
|
data/lib/rubygems/platform.rb
CHANGED
|
@@ -22,6 +22,7 @@ class Gem::Platform
|
|
|
22
22
|
end
|
|
23
23
|
|
|
24
24
|
def self.match_platforms?(platform, platforms)
|
|
25
|
+
platform = Gem::Platform.new(platform) unless platform.is_a?(Gem::Platform)
|
|
25
26
|
platforms.any? do |local_platform|
|
|
26
27
|
platform.nil? ||
|
|
27
28
|
local_platform == platform ||
|
|
@@ -162,6 +163,9 @@ class Gem::Platform
|
|
|
162
163
|
# runtime platform "no version" stands for 'gnu'. To be able to disinguish
|
|
163
164
|
# these, the method receiver is the gem platform, while the argument is
|
|
164
165
|
# the runtime platform.
|
|
166
|
+
#
|
|
167
|
+
#--
|
|
168
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
|
165
169
|
|
|
166
170
|
def ===(other)
|
|
167
171
|
return nil unless Gem::Platform === other
|
|
@@ -180,11 +184,23 @@ class Gem::Platform
|
|
|
180
184
|
# version
|
|
181
185
|
(
|
|
182
186
|
(@os != "linux" && (@version.nil? || other.version.nil?)) ||
|
|
183
|
-
(@os == "linux" && (other.
|
|
187
|
+
(@os == "linux" && (normalized_linux_version == other.normalized_linux_version || ["musl#{@version}", "musleabi#{@version}", "musleabihf#{@version}"].include?(other.version))) ||
|
|
184
188
|
@version == other.version
|
|
185
189
|
)
|
|
186
190
|
end
|
|
187
191
|
|
|
192
|
+
#--
|
|
193
|
+
# NOTE: Until it can be removed, changes to this method must also be reflected in `bundler/lib/bundler/rubygems_ext.rb`
|
|
194
|
+
|
|
195
|
+
def normalized_linux_version
|
|
196
|
+
return nil unless @version
|
|
197
|
+
|
|
198
|
+
without_gnu_nor_abi_modifiers = @version.sub(/\Agnu/, "").sub(/eabi(hf)?\Z/, "")
|
|
199
|
+
return nil if without_gnu_nor_abi_modifiers.empty?
|
|
200
|
+
|
|
201
|
+
without_gnu_nor_abi_modifiers
|
|
202
|
+
end
|
|
203
|
+
|
|
188
204
|
##
|
|
189
205
|
# Does +other+ match this platform? If +other+ is a String it will be
|
|
190
206
|
# converted to a Gem::Platform first. See #=== for matching rules.
|
data/lib/rubygems/resolver.rb
CHANGED
|
@@ -246,7 +246,7 @@ class Gem::Resolver
|
|
|
246
246
|
|
|
247
247
|
sources.each do |source|
|
|
248
248
|
groups[source].
|
|
249
|
-
sort_by {|spec| [spec.version, Gem::Platform.local
|
|
249
|
+
sort_by {|spec| [spec.version, spec.platform =~ Gem::Platform.local ? 1 : 0] }.
|
|
250
250
|
map {|spec| ActivationRequest.new spec, dependency }.
|
|
251
251
|
each {|activation_request| activation_requests << activation_request }
|
|
252
252
|
end
|
data/lib/rubygems.rb
CHANGED
data/rubygems-update.gemspec
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = "rubygems-update"
|
|
5
|
-
s.version = "3.3.
|
|
5
|
+
s.version = "3.3.24"
|
|
6
6
|
s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
|
|
7
7
|
s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
|
|
8
8
|
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
|
2
|
-
|
|
2
|
+
MIIDFjCCAf6gAwIBAgIBBDANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
|
|
3
3
|
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoY
|
|
4
4
|
Dzk5OTkxMjMxMjM1OTU5WjAtMRIwEAYDVQQDDAlhbHRlcm5hdGUxFzAVBgoJkiaJ
|
|
5
5
|
k/IsZAEZFgdleGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
pebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0AnYNiDZAG3J/gFQmYZ
|
|
7
|
+
9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SFC+1f8KVuH4tLXORW
|
|
8
|
+
30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMKqaTTPjxoXJIcgacy
|
|
9
|
+
prkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RRftEwktFo8vQgDBo9
|
|
10
|
+
NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgOQSXCGPsM/AEdFrh/
|
|
11
|
+
LKQQv2M/M7WNevnEUgsEIwIDAQABoz8wPTAcBgNVHREEFTATgRFhbHRlcm5hdGVA
|
|
12
|
+
ZXhhbXBsZTAdBgNVHQ4EFgQUYPwS8g98+4Tq/8gcEK1iilkGXH4wDQYJKoZIhvcN
|
|
13
|
+
AQELBQADggEBABSKUFmTk53+yrVFT3TvX5iGgXudNdACQqcnknAg66Q8+wMA8WT1
|
|
14
|
+
M2oZJIH4SWSKUGMYubpYuc53tTtMnR594LPidyNbxo8KXMYoNfEkZCk6hh0eKVdx
|
|
15
|
+
zPJSZ4fOQ4mKFCd7HrycOr4bxuGPTVQERYJ45vZnhvVJDIRMgshnQuivP3VBwXkQ
|
|
16
|
+
gKLTCh2ew2ZJgPi1dfqdNMMSw7k4OQtQVhwbAkHgwL1TUShAO9lHzxFHlQgssfR0
|
|
17
|
+
f6c89eB035Vn9s21StjerTOlC9+v4hOO7QhvbsCcUs2wWiE1BWo1QqnVBCjGKyVE
|
|
18
|
+
fISkJd1Sn5j+Vx/NJ7EfZcOGGQMdxHC+c90=
|
|
19
19
|
-----END CERTIFICATE-----
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
|
2
|
-
|
|
2
|
+
MIIDFDCCAfygAwIBAgIBBTANBgkqhkiG9w0BAQsFADAtMRIwEAYDVQQDDAlhbHRl
|
|
3
3
|
cm5hdGUxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoX
|
|
4
4
|
DTM4MDExOTAzMTQwN1owLTESMBAGA1UEAwwJYWx0ZXJuYXRlMRcwFQYKCZImiZPy
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
5
|
+
LGQBGRYHZXhhbXBsZTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKXm
|
|
6
|
+
xpuzTp8fg7VhtcULCQX038DZWb382OtZ5WXHK4VOr8dAJ2DYg2QBtyf4BUJmGfYC
|
|
7
|
+
ffK8xMHyzAhqvUf02TPpQBGi4c2GQrt1+EHYSsa9cWf0hQvtX/Clbh+LS1zkVt9A
|
|
8
|
+
8Gsj4TcZ6zr7qeKVi4mLl1EmaVfQhjLz0lAltqHYTJATCqmk0z48aFySHIGnMqa5
|
|
9
|
+
DYCKuPHEr6lhv3vx6zEbZKrxWw+bWtNLjtZpaWo2GMNUUX7RMJLRaPL0IAwaPTU/
|
|
10
|
+
xKqBO9rX32g5y6uq0K1bcOCq/X8u++Q4zQFl8oggY5yYDkElwhj7DPwBHRa4fyyk
|
|
11
|
+
EL9jPzO1jXr5xFILBCMCAwEAAaM/MD0wHAYDVR0RBBUwE4ERYWx0ZXJuYXRlQGV4
|
|
12
|
+
YW1wbGUwHQYDVR0OBBYEFGD8EvIPfPuE6v/IHBCtYopZBlx+MA0GCSqGSIb3DQEB
|
|
13
|
+
CwUAA4IBAQBJeq9kniAdddOY2r9MhRYb8/rzWL1mcCgbIzkwXCTeOyVt0nWZZwAy
|
|
14
|
+
arEy8ofkXt1O3Bm+59+dPORnG5WJeBGVmGDHo9HxDjm4dgTramYqgtxbthmB/pu+
|
|
15
|
+
QhJ5DQg59odomoRRG7dkqacd8GMdcJVYcb3OzV3Fe5v2gtvnVPZ711APtjZ7sZUR
|
|
16
|
+
4XBA+ok95QFeSUYo4WIOCHh16pPtZ9ium5SZ7ChVVNj5rthr+sS+rQKjEdjG510w
|
|
17
|
+
UOkg8rUjEvXPGjM80/DnOvzyRJvbcCWBWWHquft3wqbjTomnQtqHne2SwRFEyfpd
|
|
18
|
+
JLEuY9QtEUCUy7obccN39+nT9jUOyg3B
|
|
19
19
|
-----END CERTIFICATE-----
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
-----BEGIN RSA PRIVATE KEY-----
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
2
|
+
MIIEpQIBAAKCAQEApebGm7NOnx+DtWG1xQsJBfTfwNlZvfzY61nlZccrhU6vx0An
|
|
3
|
+
YNiDZAG3J/gFQmYZ9gJ98rzEwfLMCGq9R/TZM+lAEaLhzYZCu3X4QdhKxr1xZ/SF
|
|
4
|
+
C+1f8KVuH4tLXORW30DwayPhNxnrOvup4pWLiYuXUSZpV9CGMvPSUCW2odhMkBMK
|
|
5
|
+
qaTTPjxoXJIcgacyprkNgIq48cSvqWG/e/HrMRtkqvFbD5ta00uO1mlpajYYw1RR
|
|
6
|
+
ftEwktFo8vQgDBo9NT/EqoE72tffaDnLq6rQrVtw4Kr9fy775DjNAWXyiCBjnJgO
|
|
7
|
+
QSXCGPsM/AEdFrh/LKQQv2M/M7WNevnEUgsEIwIDAQABAoIBABB/S16uTPIr2xgN
|
|
8
|
+
WFr4xvPtrtZphrAK1bNJpDMjxCMkePxSV9gcj6xBM2ppEnTQ3GIHS2j49oPm1f08
|
|
9
|
+
SAhAw9ySpElcriGW6Unk6EP78yuiKQXSXeyatUCj4riGTH83QaA/v+iXj8y/6hFa
|
|
10
|
+
d0FN56tM00ZBkJYn6UBl2JMZvPiI9cdRO1KhhK4+NZrKg8jdRwjJe9fxo31xefpr
|
|
11
|
+
jNqyx7O06hzaVfMt5jUi5qSc+/1EWJtXlvCyuJJCjpEay6ePUP5eTi/hQpwfaO82
|
|
12
|
+
nIRXolwg7TPxg8rea6WQM/x6Ec3MWYUflJUdZbKDQQv1pyZR62T7WHNA1p5jHMzq
|
|
13
|
+
MW3kctkCgYEAxhnT8+TZG9sF/fQro0JZnKxnZXjQ9ob7vmvbyBgHf2HzrY716UkX
|
|
14
|
+
vLAHrykgqzZmIlWATayCryr+CzkaXu/xLrS0IMmjF//VlFjlob6OL9n40qrOW221
|
|
15
|
+
ryqNNaKkMmm4c4N9D1rhsNH+vVQoeEDkHet9Pll9ilB2o3ERapMfBzcCgYEA1mO+
|
|
16
|
+
iJLf7y1chmpwMWLFrK4hjPK6670K4UvDCfX6517xHtykZ05lZQ9OQLjjDsyG8Uub
|
|
17
|
+
H6k7KxCTV+zxLQDcUUEh/UbTb6eMhh2HAU+Bym8+lWCIdl8qPouPKz1dc+rImRwC
|
|
18
|
+
JE7LtxbyHXv67sPL5/7GhmdCxThXQvjH7fP1CHUCgYEArbj4pmmJ+2OXXZ1Cp2kI
|
|
19
|
+
LN0Dz3ijx42YNuVfV5m6+Xpst0cnX+05Y776/iCTBZIu/uz8FyGxeOu63Ry2g4rn
|
|
20
|
+
do4BaL9qxyETq4RJ3A2/ozcDfbtMO+F58qLeMqruU0di+enVQiHwyZ9eRaoH020U
|
|
21
|
+
nyhkLMlNzn3BjJMbMtrR2wECgYEAm54tSI9sUv2XQs5x/7cVi6GeIuRyP/mpsx2+
|
|
22
|
+
RjWx2U52MZOxFne2a+PvRlWuIyjc7ruVrya1Fy5h9Zm8+pC8W5KurF1DzrFM9HDs
|
|
23
|
+
dUwUBzA2ulEm3N15GYtN8fIKKsEKuPC2sUos3wqd1j8PR08CbLTnv9mmgufBl5Bj
|
|
24
|
+
91p0y50CgYEAsD/KO1/BTJWVFAXoPgde4Fmt3vQyF7OYkOI0EEIGSVPydo8ebNib
|
|
25
|
+
cozGB1H0vhuvdrysi1Oc+uZ2pL8gpZfdYXbmD9cScXL+pP+GUmKKHTKKGAeQCWpv
|
|
26
|
+
2M3MZEjqOGQrqY50khXUDi77H1sAHMIBQ8yF6mdb+YU+OayRwBZmHiI=
|
|
27
27
|
-----END RSA PRIVATE KEY-----
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
|
2
|
-
|
|
2
|
+
MIIDLDCCAhSgAwIBAgIBAjANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
|
|
3
3
|
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMCAXDTEyMDEwMTAwMDAwMFoYDzk5
|
|
4
4
|
OTkxMjMxMjM1OTU5WjApMQ4wDAYDVQQDDAVjaGlsZDEXMBUGCgmSJomT8ixkARkW
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
NnBgKyVrEVhf02sDgXRpoTmoRfwmcMd2cWGvDmRiijHo
|
|
5
|
+
B2V4YW1wbGUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCHyxiIjR9Z
|
|
6
|
+
m3tznMc8OqAvm5h14DAUin+2eq1HzjQZ1fxkTtP4i05ieppHLTxfJrM9mH5H6sb3
|
|
7
|
+
NSNtX/L7p229tM3on8UPUZRp7qDmFNTpgdRbf03ZJFDp3MTprA85wq++gc7GMI6q
|
|
8
|
+
QHhLuc3gshuy4iFzVfrWE0MRF/aVkEiH91iNUCZ3vZTahDG/jTafyMYnADE+26mj
|
|
9
|
+
fK8yCoTA6qYnYQrMPy3jcr0g3aak5+z5Gn55qIJklaAXV7vAyoNgYIq6MjXs9J0f
|
|
10
|
+
kedZWwJTEfAarZDo2s9wEQi7McPzv4HmNB3H6JfJsAVgaD0WtQcAVr7Ngr24lIx4
|
|
11
|
+
AMY7koGayD+VAgMBAAGjXDBaMBgGA1UdEQQRMA+BDWNoaWxkQGV4YW1wbGUwHQYD
|
|
12
|
+
VR0OBBYEFEVZPH+Sg200JF29GN4RJ13XfpIWMA8GA1UdEwEB/wQFMAMBAf8wDgYD
|
|
13
|
+
VR0PAQH/BAQDAgIEMA0GCSqGSIb3DQEBCwUAA4IBAQABo0B3iS7ykcIBRflUTQtd
|
|
14
|
+
ji60ZVsX+pseEvpFvlurdKR4vrhBu/5LImQxk3wMepEhyzXZbKBanWJjgZcfJBKA
|
|
15
|
+
XqWFAPu80WPunonxUpNdgKMouRBCmzmKwXojzafpZUKTZKEm7q8cbE7u1Eye8Ipv
|
|
16
|
+
uj41TMlIpGvJnjfGKugJh2Gu+5Sfl7P6h8nLvM5dkJW8WsRRMGc7vFEXKCvsZbth
|
|
17
|
+
wclhJXWciI4wsGUENTPpqxWhO2uj80/ob3rUNgIwROKeyBWXPUVKCme4AII5Cqk7
|
|
18
|
+
qwQzNIRwWofBIb7TV2aICnFUHb3NHZEjMacviaMI+Nl5ND+gDAdc8YQmXrSHg1fW
|
|
20
19
|
-----END CERTIFICATE-----
|
|
@@ -1,20 +1,19 @@
|
|
|
1
1
|
-----BEGIN CERTIFICATE-----
|
|
2
|
-
|
|
2
|
+
MIIDKjCCAhKgAwIBAgIBAzANBgkqhkiG9w0BAQsFADAqMQ8wDQYDVQQDDAZub2Jv
|
|
3
3
|
ZHkxFzAVBgoJkiaJk/IsZAEZFgdleGFtcGxlMB4XDTEyMDEwMTAwMDAwMFoXDTM4
|
|
4
4
|
MDExOTAzMTQwN1owKTEOMAwGA1UEAwwFY2hpbGQxFzAVBgoJkiaJk/IsZAEZFgdl
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
hsI7EPoqOCw4egbv9SlvlVOQTPDqpZfSfT4Id0AnpA==
|
|
5
|
+
eGFtcGxlMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh8sYiI0fWZt7
|
|
6
|
+
c5zHPDqgL5uYdeAwFIp/tnqtR840GdX8ZE7T+ItOYnqaRy08XyazPZh+R+rG9zUj
|
|
7
|
+
bV/y+6dtvbTN6J/FD1GUae6g5hTU6YHUW39N2SRQ6dzE6awPOcKvvoHOxjCOqkB4
|
|
8
|
+
S7nN4LIbsuIhc1X61hNDERf2lZBIh/dYjVAmd72U2oQxv402n8jGJwAxPtupo3yv
|
|
9
|
+
MgqEwOqmJ2EKzD8t43K9IN2mpOfs+Rp+eaiCZJWgF1e7wMqDYGCKujI17PSdH5Hn
|
|
10
|
+
WVsCUxHwGq2Q6NrPcBEIuzHD87+B5jQdx+iXybAFYGg9FrUHAFa+zYK9uJSMeADG
|
|
11
|
+
O5KBmsg/lQIDAQABo1wwWjAYBgNVHREEETAPgQ1jaGlsZEBleGFtcGxlMB0GA1Ud
|
|
12
|
+
DgQWBBRFWTx/koNtNCRdvRjeESdd136SFjAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud
|
|
13
|
+
DwEB/wQEAwICBDANBgkqhkiG9w0BAQsFAAOCAQEAR53288aEhg6x3zMHv0Y8ZSqB
|
|
14
|
+
+xPTrKzouqmHdaFBvEowIkfK6V29A2LAoIBi5DfsnkbKMGCD4mOlX3ipGoi7x2CZ
|
|
15
|
+
UspOfXQ93CdiG9laS4sr4f5ZUJR1sc083UT1PBwqtnajjVUPxYz9I8g2ZxxawmA/
|
|
16
|
+
bybbft/l4xHDv7RUP56uzm/BoCyiUdEC9gvq+5NYS95+M7v2J/CsvV34d5xnb8cl
|
|
17
|
+
49zOoboN1JoZErPZ2dGnxpHvExOcQhz6CVUIEPri5eqRae+zln3RRd8RJ4gPe1FG
|
|
18
|
+
H2aDHUwX7NKxY5Xq2NT2vUmnhTmNzFT5HC9gjG8Zu+2dPw0tTZNxyuctSAhAgw==
|
|
20
19
|
-----END CERTIFICATE-----
|