rubygems-update 3.3.19 → 3.3.20
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +20 -0
- data/bin/update_rubygems +1 -1
- data/bundler/CHANGELOG.md +26 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/install.rb +5 -2
- data/bundler/lib/bundler/cli/outdated.rb +12 -3
- data/bundler/lib/bundler/cli/platform.rb +1 -1
- data/bundler/lib/bundler/cli.rb +5 -3
- data/bundler/lib/bundler/definition.rb +61 -11
- data/bundler/lib/bundler/fetcher.rb +6 -6
- data/bundler/lib/bundler/gem_helpers.rb +7 -1
- data/bundler/lib/bundler/installer/standalone.rb +1 -1
- data/bundler/lib/bundler/installer.rb +8 -1
- data/bundler/lib/bundler/lazy_specification.rb +21 -21
- data/bundler/lib/bundler/man/bundle-cache.1 +6 -0
- data/bundler/lib/bundler/man/bundle-cache.1.ronn +7 -0
- data/bundler/lib/bundler/man/bundle-config.1 +2 -2
- data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
- data/bundler/lib/bundler/man/bundle-install.1 +4 -0
- data/bundler/lib/bundler/man/bundle-install.1.ronn +6 -0
- data/bundler/lib/bundler/man/bundle-platform.1 +15 -5
- data/bundler/lib/bundler/man/bundle-platform.1.ronn +14 -7
- data/bundler/lib/bundler/man/bundle.1 +3 -6
- data/bundler/lib/bundler/man/bundle.1.ronn +3 -4
- data/bundler/lib/bundler/resolver.rb +2 -1
- data/bundler/lib/bundler/ruby_dsl.rb +1 -1
- data/bundler/lib/bundler/ruby_version.rb +5 -5
- data/bundler/lib/bundler/rubygems_ext.rb +13 -0
- data/bundler/lib/bundler/source/metadata.rb +1 -1
- data/bundler/lib/bundler/source_list.rb +4 -0
- data/bundler/lib/bundler/spec_set.rb +15 -28
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems/available_set.rb +3 -3
- data/lib/rubygems/basic_specification.rb +2 -2
- data/lib/rubygems/command.rb +6 -6
- data/lib/rubygems/commands/cert_command.rb +1 -1
- data/lib/rubygems/commands/cleanup_command.rb +1 -1
- data/lib/rubygems/commands/contents_command.rb +1 -1
- data/lib/rubygems/commands/dependency_command.rb +4 -4
- data/lib/rubygems/commands/fetch_command.rb +2 -2
- data/lib/rubygems/commands/generate_index_command.rb +2 -2
- data/lib/rubygems/commands/install_command.rb +7 -7
- data/lib/rubygems/commands/pristine_command.rb +5 -5
- data/lib/rubygems/commands/setup_command.rb +4 -4
- data/lib/rubygems/commands/sources_command.rb +3 -3
- data/lib/rubygems/commands/specification_command.rb +2 -2
- data/lib/rubygems/commands/uninstall_command.rb +4 -4
- data/lib/rubygems/commands/update_command.rb +5 -5
- data/lib/rubygems/commands/which_command.rb +1 -1
- data/lib/rubygems/config_file.rb +7 -7
- data/lib/rubygems/core_ext/kernel_warn.rb +1 -1
- data/lib/rubygems/defaults.rb +1 -1
- data/lib/rubygems/dependency.rb +5 -5
- data/lib/rubygems/dependency_installer.rb +5 -5
- data/lib/rubygems/dependency_list.rb +4 -4
- data/lib/rubygems/doctor.rb +4 -4
- data/lib/rubygems/exceptions.rb +1 -1
- data/lib/rubygems/ext/ext_conf_builder.rb +2 -2
- data/lib/rubygems/gemcutter_utilities.rb +1 -1
- data/lib/rubygems/indexer.rb +3 -3
- data/lib/rubygems/installer.rb +5 -13
- data/lib/rubygems/name_tuple.rb +3 -3
- data/lib/rubygems/package/tar_header.rb +17 -17
- data/lib/rubygems/package/tar_writer.rb +1 -1
- data/lib/rubygems/package.rb +19 -8
- data/lib/rubygems/platform.rb +15 -15
- data/lib/rubygems/query_utils.rb +6 -6
- data/lib/rubygems/remote_fetcher.rb +3 -3
- data/lib/rubygems/request/connection_pools.rb +2 -2
- data/lib/rubygems/request/http_pool.rb +1 -1
- data/lib/rubygems/request.rb +1 -1
- data/lib/rubygems/request_set/gem_dependency_api.rb +3 -3
- data/lib/rubygems/request_set/lockfile/parser.rb +12 -12
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +2 -2
- data/lib/rubygems/request_set.rb +3 -3
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/api_specification.rb +4 -4
- data/lib/rubygems/resolver/best_set.rb +3 -3
- data/lib/rubygems/resolver/conflict.rb +3 -3
- data/lib/rubygems/resolver/git_specification.rb +3 -3
- data/lib/rubygems/resolver/index_specification.rb +3 -2
- data/lib/rubygems/resolver/installed_specification.rb +2 -2
- data/lib/rubygems/resolver/installer_set.rb +7 -12
- data/lib/rubygems/resolver/lock_set.rb +1 -1
- data/lib/rubygems/resolver/lock_specification.rb +1 -1
- data/lib/rubygems/resolver/vendor_specification.rb +3 -3
- data/lib/rubygems/resolver.rb +4 -4
- data/lib/rubygems/security/policy.rb +6 -6
- data/lib/rubygems/security/signer.rb +1 -1
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/source/git.rb +4 -4
- data/lib/rubygems/source.rb +1 -1
- data/lib/rubygems/spec_fetcher.rb +1 -1
- data/lib/rubygems/specification.rb +26 -24
- data/lib/rubygems/specification_policy.rb +4 -4
- data/lib/rubygems/uninstaller.rb +4 -4
- data/lib/rubygems/user_interaction.rb +2 -2
- data/lib/rubygems/version.rb +12 -4
- data/lib/rubygems.rb +8 -8
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +1 -1
- data/test/rubygems/helper.rb +5 -5
- data/test/rubygems/test_gem_config_file.rb +17 -5
- data/test/rubygems/test_gem_dependency_installer.rb +2 -2
- 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/custom_name/build.rb +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_ext_cargo_builder/rust_ruby_example/build.rb +1 -1
- data/test/rubygems/test_gem_installer.rb +6 -3
- data/test/rubygems/test_gem_package.rb +22 -0
- data/test/rubygems/test_gem_package_tar_reader.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +9 -3
- data/test/rubygems/test_gem_resolver_index_specification.rb +1 -1
- data/test/rubygems/test_gem_resolver_installer_set.rb +44 -0
- data/test/rubygems/test_gem_specification.rb +11 -2
- data/test/rubygems/test_gem_version.rb +9 -2
- data/test/rubygems/test_require.rb +1 -1
- data/test/rubygems/utilities.rb +4 -4
- metadata +3 -3
@@ -473,7 +473,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
473
473
|
# spec.platform = Gem::Platform.local
|
474
474
|
|
475
475
|
def platform=(platform)
|
476
|
-
if @original_platform.nil?
|
476
|
+
if @original_platform.nil? ||
|
477
477
|
@original_platform == Gem::Platform::RUBY
|
478
478
|
@original_platform = platform
|
479
479
|
end
|
@@ -1046,7 +1046,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1046
1046
|
|
1047
1047
|
def self.find_active_stub_by_path(path)
|
1048
1048
|
stub = @@active_stub_with_requirable_file[path] ||= (stubs.find do |s|
|
1049
|
-
s.activated?
|
1049
|
+
s.activated? && s.contains_requirable_file?(path)
|
1050
1050
|
end || NOT_FOUND)
|
1051
1051
|
stub.this
|
1052
1052
|
end
|
@@ -1234,7 +1234,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1234
1234
|
latest_remote = remotes.sort.last
|
1235
1235
|
|
1236
1236
|
yield [local_spec, latest_remote] if
|
1237
|
-
latest_remote
|
1237
|
+
latest_remote && local_spec.version < latest_remote
|
1238
1238
|
end
|
1239
1239
|
|
1240
1240
|
nil
|
@@ -1557,7 +1557,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1557
1557
|
# Singular reader for #authors. Returns the first author in the list
|
1558
1558
|
|
1559
1559
|
def author
|
1560
|
-
val = authors
|
1560
|
+
(val = authors) && val.first
|
1561
1561
|
end
|
1562
1562
|
|
1563
1563
|
##
|
@@ -1669,7 +1669,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1669
1669
|
conflicts = {}
|
1670
1670
|
self.runtime_dependencies.each do |dep|
|
1671
1671
|
spec = Gem.loaded_specs[dep.name]
|
1672
|
-
if spec
|
1672
|
+
if spec && !spec.satisfies_requirement?(dep)
|
1673
1673
|
(conflicts[spec] ||= []) << dep
|
1674
1674
|
end
|
1675
1675
|
end
|
@@ -1696,7 +1696,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1696
1696
|
self.dependencies.any? do |dep|
|
1697
1697
|
if dep.runtime?
|
1698
1698
|
spec = Gem.loaded_specs[dep.name]
|
1699
|
-
spec
|
1699
|
+
spec && !spec.satisfies_requirement?(dep)
|
1700
1700
|
else
|
1701
1701
|
false
|
1702
1702
|
end
|
@@ -1717,7 +1717,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1717
1717
|
|
1718
1718
|
DateLike = Object.new # :nodoc:
|
1719
1719
|
def DateLike.===(obj) # :nodoc:
|
1720
|
-
defined?(::Date)
|
1720
|
+
defined?(::Date) && Date === obj
|
1721
1721
|
end
|
1722
1722
|
|
1723
1723
|
DateTimeFormat = # :nodoc:
|
@@ -1757,9 +1757,9 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1757
1757
|
# executable now. See Gem.bin_path.
|
1758
1758
|
|
1759
1759
|
def default_executable # :nodoc:
|
1760
|
-
if defined?(@default_executable)
|
1760
|
+
if defined?(@default_executable) && @default_executable
|
1761
1761
|
result = @default_executable
|
1762
|
-
elsif @executables
|
1762
|
+
elsif @executables && @executables.size == 1
|
1763
1763
|
result = Array(@executables).first
|
1764
1764
|
else
|
1765
1765
|
result = nil
|
@@ -1876,7 +1876,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1876
1876
|
# Singular accessor for #executables
|
1877
1877
|
|
1878
1878
|
def executable
|
1879
|
-
val = executables
|
1879
|
+
(val = executables) && val.first
|
1880
1880
|
end
|
1881
1881
|
|
1882
1882
|
##
|
@@ -1988,7 +1988,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1988
1988
|
# True if this gem has files in test_files
|
1989
1989
|
|
1990
1990
|
def has_unit_tests? # :nodoc:
|
1991
|
-
|
1991
|
+
!test_files.empty?
|
1992
1992
|
end
|
1993
1993
|
|
1994
1994
|
# :stopdoc:
|
@@ -2041,7 +2041,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2041
2041
|
self.name = name if name
|
2042
2042
|
self.version = version if version
|
2043
2043
|
|
2044
|
-
if platform = Gem.platforms.last
|
2044
|
+
if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local
|
2045
2045
|
self.platform = platform
|
2046
2046
|
end
|
2047
2047
|
|
@@ -2156,8 +2156,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2156
2156
|
return
|
2157
2157
|
end
|
2158
2158
|
|
2159
|
-
if @specification_version > CURRENT_SPECIFICATION_VERSION
|
2160
|
-
|
2159
|
+
if @specification_version > CURRENT_SPECIFICATION_VERSION &&
|
2160
|
+
sym.to_s.end_with?("=")
|
2161
2161
|
warn "ignoring #{sym} loading #{full_name}" if $DEBUG
|
2162
2162
|
else
|
2163
2163
|
super
|
@@ -2183,7 +2183,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2183
2183
|
# file list.
|
2184
2184
|
|
2185
2185
|
def normalize
|
2186
|
-
if defined?(@extra_rdoc_files)
|
2186
|
+
if defined?(@extra_rdoc_files) && @extra_rdoc_files
|
2187
2187
|
@extra_rdoc_files.uniq!
|
2188
2188
|
@files ||= []
|
2189
2189
|
@files.concat(@extra_rdoc_files)
|
@@ -2208,7 +2208,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2208
2208
|
# platform. For use with legacy gems.
|
2209
2209
|
|
2210
2210
|
def original_name # :nodoc:
|
2211
|
-
if platform == Gem::Platform::RUBY
|
2211
|
+
if platform == Gem::Platform::RUBY || platform.nil?
|
2212
2212
|
"#{@name}-#{@version}"
|
2213
2213
|
else
|
2214
2214
|
"#{@name}-#{@version}-#{@original_platform}"
|
@@ -2241,8 +2241,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2241
2241
|
attributes.each do |attr_name|
|
2242
2242
|
current_value = self.send attr_name
|
2243
2243
|
current_value = current_value.sort if %i[files test_files].include? attr_name
|
2244
|
-
if current_value != default_value(attr_name)
|
2245
|
-
self.class.required_attribute?
|
2244
|
+
if current_value != default_value(attr_name) ||
|
2245
|
+
self.class.required_attribute?(attr_name)
|
2246
2246
|
|
2247
2247
|
q.text "s.#{attr_name} = "
|
2248
2248
|
|
@@ -2300,7 +2300,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2300
2300
|
# Singular accessor for #require_paths
|
2301
2301
|
|
2302
2302
|
def require_path
|
2303
|
-
val = require_paths
|
2303
|
+
(val = require_paths) && val.first
|
2304
2304
|
end
|
2305
2305
|
|
2306
2306
|
##
|
@@ -2375,7 +2375,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2375
2375
|
|
2376
2376
|
def satisfies_requirement?(dependency)
|
2377
2377
|
return @name == dependency.name &&
|
2378
|
-
|
2378
|
+
dependency.requirement.satisfied_by?(@version)
|
2379
2379
|
end
|
2380
2380
|
|
2381
2381
|
##
|
@@ -2429,7 +2429,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2429
2429
|
# Singular accessor for #test_files
|
2430
2430
|
|
2431
2431
|
def test_file # :nodoc:
|
2432
|
-
val = test_files
|
2432
|
+
(val = test_files) && val.first
|
2433
2433
|
end
|
2434
2434
|
|
2435
2435
|
##
|
@@ -2451,7 +2451,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2451
2451
|
@test_files = [@test_suite_file].flatten
|
2452
2452
|
@test_suite_file = nil
|
2453
2453
|
end
|
2454
|
-
if defined?(@test_files)
|
2454
|
+
if defined?(@test_files) && @test_files
|
2455
2455
|
@test_files
|
2456
2456
|
else
|
2457
2457
|
@test_files = []
|
@@ -2475,13 +2475,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2475
2475
|
|
2476
2476
|
result << " s.name = #{ruby_code name}"
|
2477
2477
|
result << " s.version = #{ruby_code version}"
|
2478
|
-
unless platform.nil?
|
2478
|
+
unless platform.nil? || platform == Gem::Platform::RUBY
|
2479
2479
|
result << " s.platform = #{ruby_code original_platform}"
|
2480
2480
|
end
|
2481
2481
|
result << ""
|
2482
2482
|
result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version="
|
2483
2483
|
|
2484
|
-
if metadata
|
2484
|
+
if metadata && !metadata.empty?
|
2485
2485
|
result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata="
|
2486
2486
|
end
|
2487
2487
|
result << " s.require_paths = #{ruby_code raw_require_paths}"
|
@@ -2665,6 +2665,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2665
2665
|
|
2666
2666
|
def version=(version)
|
2667
2667
|
@version = Gem::Version.create(version)
|
2668
|
+
return if @version.nil?
|
2669
|
+
|
2668
2670
|
# skip to set required_ruby_version when pre-released rubygems.
|
2669
2671
|
# It caused to raise CircularDependencyError
|
2670
2672
|
if @version.prerelease? && (@name.nil? || @name.strip != "rubygems")
|
@@ -188,7 +188,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
188
188
|
prerelease_dep && !@specification.version.prerelease?
|
189
189
|
|
190
190
|
open_ended = dep.requirement.requirements.all? do |op, version|
|
191
|
-
|
191
|
+
!version.prerelease? && (op == ">" || op == ">=")
|
192
192
|
end
|
193
193
|
|
194
194
|
if open_ended
|
@@ -203,7 +203,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
203
203
|
else
|
204
204
|
bugfix = if op == ">"
|
205
205
|
", '> #{dep_version}'"
|
206
|
-
elsif op == ">="
|
206
|
+
elsif op == ">=" && base != segments
|
207
207
|
", '>= #{dep_version}'"
|
208
208
|
end
|
209
209
|
|
@@ -338,7 +338,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
338
338
|
String
|
339
339
|
end
|
340
340
|
|
341
|
-
unless Array === val
|
341
|
+
unless Array === val && val.all? {|x| x.kind_of?(klass) }
|
342
342
|
error "#{field} must be an Array of #{klass}"
|
343
343
|
end
|
344
344
|
end
|
@@ -404,7 +404,7 @@ http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard li
|
|
404
404
|
homepage = @specification.homepage
|
405
405
|
|
406
406
|
# Make sure a homepage is valid HTTP/HTTPS URI
|
407
|
-
if homepage
|
407
|
+
if homepage && !homepage.empty?
|
408
408
|
require "uri"
|
409
409
|
begin
|
410
410
|
homepage_uri = URI.parse(homepage)
|
data/lib/rubygems/uninstaller.rb
CHANGED
@@ -105,8 +105,8 @@ class Gem::Uninstaller
|
|
105
105
|
@default_specs_matching_uninstall_params = default_specs
|
106
106
|
|
107
107
|
list, other_repo_specs = list.partition do |spec|
|
108
|
-
@gem_home == spec.base_dir
|
109
|
-
(@user_install
|
108
|
+
@gem_home == spec.base_dir ||
|
109
|
+
(@user_install && spec.base_dir == Gem.user_dir)
|
110
110
|
end
|
111
111
|
|
112
112
|
list.sort!
|
@@ -239,8 +239,8 @@ class Gem::Uninstaller
|
|
239
239
|
# spec:: the spec of the gem to be uninstalled
|
240
240
|
|
241
241
|
def remove(spec)
|
242
|
-
unless path_ok?(@gem_home, spec)
|
243
|
-
(@user_install
|
242
|
+
unless path_ok?(@gem_home, spec) ||
|
243
|
+
(@user_install && path_ok?(Gem.user_dir, spec))
|
244
244
|
e = Gem::GemNotInHomeException.new \
|
245
245
|
"Gem '#{spec.full_name}' is not installed in directory #{@gem_home}"
|
246
246
|
e.spec = spec
|
@@ -284,7 +284,7 @@ class Gem::StreamUI
|
|
284
284
|
# Ask a question. Returns an answer if connected to a tty, nil otherwise.
|
285
285
|
|
286
286
|
def ask(question)
|
287
|
-
return nil if
|
287
|
+
return nil if !tty?
|
288
288
|
|
289
289
|
@outs.print(question + " ")
|
290
290
|
@outs.flush
|
@@ -298,7 +298,7 @@ class Gem::StreamUI
|
|
298
298
|
# Ask for a password. Does not echo response to terminal.
|
299
299
|
|
300
300
|
def ask_for_password(question)
|
301
|
-
return nil if
|
301
|
+
return nil if !tty?
|
302
302
|
|
303
303
|
@outs.print(question, " ")
|
304
304
|
@outs.flush
|
data/lib/rubygems/version.rb
CHANGED
@@ -171,9 +171,7 @@ class Gem::Version
|
|
171
171
|
# True if the +version+ string matches RubyGems' requirements.
|
172
172
|
|
173
173
|
def self.correct?(version)
|
174
|
-
|
175
|
-
warn "nil versions are discouraged and will be deprecated in Rubygems 4" if version.nil?
|
176
|
-
end
|
174
|
+
nil_versions_are_discouraged! if version.nil?
|
177
175
|
|
178
176
|
!!(version.to_s =~ ANCHORED_VERSION_PATTERN)
|
179
177
|
end
|
@@ -190,6 +188,8 @@ class Gem::Version
|
|
190
188
|
if self === input # check yourself before you wreck yourself
|
191
189
|
input
|
192
190
|
elsif input.nil?
|
191
|
+
nil_versions_are_discouraged!
|
192
|
+
|
193
193
|
nil
|
194
194
|
else
|
195
195
|
new input
|
@@ -206,6 +206,14 @@ class Gem::Version
|
|
206
206
|
@@all[version] ||= super
|
207
207
|
end
|
208
208
|
|
209
|
+
def self.nil_versions_are_discouraged!
|
210
|
+
unless Gem::Deprecate.skip
|
211
|
+
warn "nil versions are discouraged and will be deprecated in Rubygems 4"
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
private_class_method :nil_versions_are_discouraged!
|
216
|
+
|
209
217
|
##
|
210
218
|
# Constructs a Version from the +version+ string. A version string is a
|
211
219
|
# series of digits or ASCII letters separated by dots.
|
@@ -244,7 +252,7 @@ class Gem::Version
|
|
244
252
|
# same precision. Version "1.0" is not the same as version "1".
|
245
253
|
|
246
254
|
def eql?(other)
|
247
|
-
self.class === other
|
255
|
+
self.class === other && @version == other._version
|
248
256
|
end
|
249
257
|
|
250
258
|
def hash # :nodoc:
|
data/lib/rubygems.rb
CHANGED
@@ -8,7 +8,7 @@
|
|
8
8
|
require "rbconfig"
|
9
9
|
|
10
10
|
module Gem
|
11
|
-
VERSION = "3.3.
|
11
|
+
VERSION = "3.3.20".freeze
|
12
12
|
end
|
13
13
|
|
14
14
|
# Must be first since it unloads the prelude from 1.9.2
|
@@ -121,7 +121,7 @@ module Gem
|
|
121
121
|
|
122
122
|
# When https://bugs.ruby-lang.org/issues/17259 is available, there is no need to override Kernel#warn
|
123
123
|
KERNEL_WARN_IGNORES_INTERNAL_ENTRIES = RUBY_ENGINE == "truffleruby" ||
|
124
|
-
|
124
|
+
(RUBY_ENGINE == "ruby" && RUBY_VERSION >= "3.0")
|
125
125
|
|
126
126
|
##
|
127
127
|
# An Array of Regexps that match windows Ruby platforms.
|
@@ -741,8 +741,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
741
741
|
def self.prefix
|
742
742
|
prefix = File.dirname RUBYGEMS_DIR
|
743
743
|
|
744
|
-
if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"])
|
745
|
-
prefix != File.expand_path(RbConfig::CONFIG["libdir"])
|
744
|
+
if prefix != File.expand_path(RbConfig::CONFIG["sitelibdir"]) &&
|
745
|
+
prefix != File.expand_path(RbConfig::CONFIG["libdir"]) &&
|
746
746
|
"lib" == File.basename(RUBYGEMS_DIR)
|
747
747
|
prefix
|
748
748
|
end
|
@@ -845,8 +845,8 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
845
845
|
# Returns the latest release version of RubyGems.
|
846
846
|
|
847
847
|
def self.latest_rubygems_version
|
848
|
-
latest_version_for("rubygems-update")
|
849
|
-
raise
|
848
|
+
latest_version_for("rubygems-update") ||
|
849
|
+
raise("Can't find 'rubygems-update' in any repo. Check `gem source list`.")
|
850
850
|
end
|
851
851
|
|
852
852
|
##
|
@@ -854,7 +854,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
854
854
|
|
855
855
|
def self.latest_version_for(name)
|
856
856
|
spec = latest_spec_for name
|
857
|
-
spec
|
857
|
+
spec && spec.version
|
858
858
|
end
|
859
859
|
|
860
860
|
##
|
@@ -944,7 +944,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
944
944
|
".rb",
|
945
945
|
*%w[DLEXT DLEXT2].map do |key|
|
946
946
|
val = RbConfig::CONFIG[key]
|
947
|
-
next unless val
|
947
|
+
next unless val && !val.empty?
|
948
948
|
".#{val}"
|
949
949
|
end,
|
950
950
|
].compact.uniq
|
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.20"
|
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
|
|
data/setup.rb
CHANGED
data/test/rubygems/helper.rb
CHANGED
@@ -599,7 +599,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
599
599
|
end
|
600
600
|
|
601
601
|
def in_path?(executable) # :nodoc:
|
602
|
-
return true if %r{\A([A-Z]:|/)} =~ executable
|
602
|
+
return true if %r{\A([A-Z]:|/)} =~ executable && File.exist?(executable)
|
603
603
|
|
604
604
|
ENV["PATH"].split(File::PATH_SEPARATOR).any? do |directory|
|
605
605
|
File.exist? File.join directory, executable
|
@@ -849,7 +849,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
849
849
|
# or a +block+ can be given for full customization of the specification.
|
850
850
|
|
851
851
|
def util_spec(name, version = 2, deps = nil, *files) # :yields: specification
|
852
|
-
raise "deps or block, not both" if deps
|
852
|
+
raise "deps or block, not both" if deps && block_given?
|
853
853
|
|
854
854
|
spec = Gem::Specification.new do |s|
|
855
855
|
s.platform = Gem::Platform::RUBY
|
@@ -1279,10 +1279,10 @@ Also, a list:
|
|
1279
1279
|
rubyexe = "#{ruby}.exe"
|
1280
1280
|
|
1281
1281
|
3.times do
|
1282
|
-
if File.exist?
|
1282
|
+
if File.exist?(ruby) && File.executable?(ruby) && !File.directory?(ruby)
|
1283
1283
|
return File.expand_path(ruby)
|
1284
1284
|
end
|
1285
|
-
if File.exist?
|
1285
|
+
if File.exist?(rubyexe) && File.executable?(rubyexe)
|
1286
1286
|
return File.expand_path(rubyexe)
|
1287
1287
|
end
|
1288
1288
|
ruby = File.join("..", ruby)
|
@@ -1592,7 +1592,7 @@ class Object
|
|
1592
1592
|
|
1593
1593
|
metaclass = class << self; self; end
|
1594
1594
|
|
1595
|
-
if respond_to?
|
1595
|
+
if respond_to?(name) && !methods.map(&:to_s).include?(name.to_s)
|
1596
1596
|
metaclass.send :define_method, name do |*args|
|
1597
1597
|
super(*args)
|
1598
1598
|
end
|
@@ -35,7 +35,7 @@ class TestGemConfigFile < Gem::TestCase
|
|
35
35
|
def test_initialize
|
36
36
|
assert_equal @temp_conf, @cfg.config_file_name
|
37
37
|
|
38
|
-
assert_equal
|
38
|
+
assert_equal true, @cfg.backtrace
|
39
39
|
assert_equal true, @cfg.update_sources
|
40
40
|
assert_equal Gem::ConfigFile::DEFAULT_BULK_THRESHOLD, @cfg.bulk_threshold
|
41
41
|
assert_equal true, @cfg.verbose
|
@@ -239,6 +239,12 @@ if you believe they were disclosed to a third party.
|
|
239
239
|
end
|
240
240
|
|
241
241
|
def test_handle_arguments_backtrace
|
242
|
+
File.open @temp_conf, "w" do |fp|
|
243
|
+
fp.puts ":backtrace: false"
|
244
|
+
end
|
245
|
+
|
246
|
+
util_config_file %W[--config-file=#{@temp_conf}]
|
247
|
+
|
242
248
|
assert_equal false, @cfg.backtrace
|
243
249
|
|
244
250
|
args = %w[--backtrace]
|
@@ -275,6 +281,12 @@ if you believe they were disclosed to a third party.
|
|
275
281
|
end
|
276
282
|
|
277
283
|
def test_handle_arguments_traceback
|
284
|
+
File.open @temp_conf, "w" do |fp|
|
285
|
+
fp.puts ":backtrace: false"
|
286
|
+
end
|
287
|
+
|
288
|
+
util_config_file %W[--config-file=#{@temp_conf}]
|
289
|
+
|
278
290
|
assert_equal false, @cfg.backtrace
|
279
291
|
|
280
292
|
args = %w[--traceback]
|
@@ -288,7 +300,7 @@ if you believe they were disclosed to a third party.
|
|
288
300
|
assert_equal @temp_conf, @cfg.config_file_name
|
289
301
|
|
290
302
|
File.open @temp_conf, "w" do |fp|
|
291
|
-
fp.puts ":backtrace:
|
303
|
+
fp.puts ":backtrace: false"
|
292
304
|
fp.puts ":update_sources: false"
|
293
305
|
fp.puts ":bulk_threshold: 10"
|
294
306
|
fp.puts ":verbose: false"
|
@@ -300,7 +312,7 @@ if you believe they were disclosed to a third party.
|
|
300
312
|
|
301
313
|
util_config_file args
|
302
314
|
|
303
|
-
assert_equal
|
315
|
+
assert_equal true, @cfg.backtrace
|
304
316
|
assert_equal true, @cfg.update_sources
|
305
317
|
assert_equal Gem::ConfigFile::DEFAULT_BULK_THRESHOLD, @cfg.bulk_threshold
|
306
318
|
assert_equal true, @cfg.verbose
|
@@ -386,7 +398,7 @@ if you believe they were disclosed to a third party.
|
|
386
398
|
end
|
387
399
|
|
388
400
|
def test_write
|
389
|
-
@cfg.backtrace =
|
401
|
+
@cfg.backtrace = false
|
390
402
|
@cfg.update_sources = false
|
391
403
|
@cfg.bulk_threshold = 10
|
392
404
|
@cfg.verbose = false
|
@@ -398,7 +410,7 @@ if you believe they were disclosed to a third party.
|
|
398
410
|
util_config_file
|
399
411
|
|
400
412
|
# These should not be written out to the config file.
|
401
|
-
assert_equal
|
413
|
+
assert_equal true, @cfg.backtrace, "backtrace"
|
402
414
|
assert_equal Gem::ConfigFile::DEFAULT_BULK_THRESHOLD, @cfg.bulk_threshold,
|
403
415
|
"bulk_threshold"
|
404
416
|
assert_equal true, @cfg.update_sources, "update_sources"
|
@@ -1051,8 +1051,8 @@ class TestGemDependencyInstaller < Gem::TestCase
|
|
1051
1051
|
|
1052
1052
|
releases = set.all_specs
|
1053
1053
|
|
1054
|
-
assert releases.any? {|s| s.name == "a"
|
1055
|
-
refute releases.any? {|s| s.name == "a"
|
1054
|
+
assert releases.any? {|s| s.name == "a" && s.version.to_s == "1" }
|
1055
|
+
refute releases.any? {|s| s.name == "a" && s.version.to_s == "1.a" }
|
1056
1056
|
|
1057
1057
|
dependency.prerelease = true
|
1058
1058
|
|
@@ -160,9 +160,9 @@ dependencies = [
|
|
160
160
|
|
161
161
|
[[package]]
|
162
162
|
name = "rb-sys"
|
163
|
-
version = "0.9.
|
163
|
+
version = "0.9.29"
|
164
164
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
165
|
-
checksum = "
|
165
|
+
checksum = "0317cb843cdeef14c5622917c55c0a170cee31348eb600c4a1683fb8c9e87e7a"
|
166
166
|
dependencies = [
|
167
167
|
"bindgen",
|
168
168
|
"linkify",
|
@@ -171,9 +171,9 @@ dependencies = [
|
|
171
171
|
|
172
172
|
[[package]]
|
173
173
|
name = "rb-sys-build"
|
174
|
-
version = "0.9.
|
174
|
+
version = "0.9.29"
|
175
175
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
176
|
-
checksum = "
|
176
|
+
checksum = "c4b8274327aecb7edcff86e290d9cbe7b572b7889c1cfc7476358f4831f78ce5"
|
177
177
|
dependencies = [
|
178
178
|
"regex",
|
179
179
|
"shell-words",
|
@@ -153,9 +153,9 @@ dependencies = [
|
|
153
153
|
|
154
154
|
[[package]]
|
155
155
|
name = "rb-sys"
|
156
|
-
version = "0.9.
|
156
|
+
version = "0.9.29"
|
157
157
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
158
|
-
checksum = "
|
158
|
+
checksum = "0317cb843cdeef14c5622917c55c0a170cee31348eb600c4a1683fb8c9e87e7a"
|
159
159
|
dependencies = [
|
160
160
|
"bindgen",
|
161
161
|
"linkify",
|
@@ -164,9 +164,9 @@ dependencies = [
|
|
164
164
|
|
165
165
|
[[package]]
|
166
166
|
name = "rb-sys-build"
|
167
|
-
version = "0.9.
|
167
|
+
version = "0.9.29"
|
168
168
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
169
|
-
checksum = "
|
169
|
+
checksum = "c4b8274327aecb7edcff86e290d9cbe7b572b7889c1cfc7476358f4831f78ce5"
|
170
170
|
dependencies = [
|
171
171
|
"regex",
|
172
172
|
"shell-words",
|
@@ -473,7 +473,7 @@ gem 'other', version
|
|
473
473
|
end
|
474
474
|
end
|
475
475
|
ensure
|
476
|
-
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG
|
476
|
+
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG || win_platform?)
|
477
477
|
end
|
478
478
|
|
479
479
|
def test_generate_bin_script_no_shebang
|
@@ -577,7 +577,7 @@ gem 'other', version
|
|
577
577
|
end
|
578
578
|
end
|
579
579
|
ensure
|
580
|
-
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG
|
580
|
+
FileUtils.chmod 0755, util_inst_bindir unless ($DEBUG || win_platform?)
|
581
581
|
end
|
582
582
|
|
583
583
|
def test_generate_bin_symlink_update_newer
|
@@ -756,7 +756,10 @@ gem 'other', version
|
|
756
756
|
end
|
757
757
|
end
|
758
758
|
|
759
|
-
|
759
|
+
errors = @ui.error.split("\n")
|
760
|
+
assert_equal "WARNING: ascii_binder-0.1.10.1 ships with a dangling symlink named bin/ascii_binder pointing to missing bin/asciibinder file. Ignoring", errors.shift
|
761
|
+
assert_empty errors
|
762
|
+
|
760
763
|
assert_empty @ui.output
|
761
764
|
end
|
762
765
|
|
@@ -529,6 +529,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
529
529
|
|
530
530
|
def test_extract_tar_gz_symlink_relative_path
|
531
531
|
package = Gem::Package.new @gem
|
532
|
+
package.verify
|
532
533
|
|
533
534
|
tgz_io = util_tar_gz do |tar|
|
534
535
|
tar.add_file "relative.rb", 0644 do |io|
|
@@ -557,6 +558,27 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
557
558
|
File.read(extracted)
|
558
559
|
end
|
559
560
|
|
561
|
+
def test_extract_tar_gz_symlink_broken_relative_path
|
562
|
+
package = Gem::Package.new @gem
|
563
|
+
package.verify
|
564
|
+
|
565
|
+
tgz_io = util_tar_gz do |tar|
|
566
|
+
tar.mkdir "lib", 0755
|
567
|
+
tar.add_symlink "lib/foo.rb", "../broken.rb", 0644
|
568
|
+
end
|
569
|
+
|
570
|
+
ui = Gem::MockGemUi.new
|
571
|
+
|
572
|
+
use_ui ui do
|
573
|
+
package.extract_tar_gz tgz_io, @destination
|
574
|
+
end
|
575
|
+
|
576
|
+
assert_equal "WARNING: a-2 ships with a dangling symlink named lib/foo.rb pointing to missing ../broken.rb file. Ignoring\n", ui.error
|
577
|
+
|
578
|
+
extracted = File.join @destination, "lib/foo.rb"
|
579
|
+
assert_path_not_exist extracted
|
580
|
+
end
|
581
|
+
|
560
582
|
def test_extract_symlink_parent
|
561
583
|
package = Gem::Package.new @gem
|
562
584
|
|
@@ -29,7 +29,7 @@ class TestGemPackageTarReader < Gem::Package::TarTestCase
|
|
29
29
|
|
30
30
|
str =
|
31
31
|
tar_file_header("lib/foo", "", 010644, content.size, Time.now) +
|
32
|
-
|
32
|
+
content + "\0" * (512 - content.size)
|
33
33
|
str << "\0" * 1024
|
34
34
|
|
35
35
|
io = TempIO.new(str)
|