rubygems-update 3.4.20 → 3.4.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +22 -0
- data/Manifest.txt +1 -0
- data/bundler/CHANGELOG.md +34 -3
- data/bundler/lib/bundler/build_metadata.rb +3 -3
- data/bundler/lib/bundler/cli/check.rb +1 -1
- data/bundler/lib/bundler/cli/gem.rb +1 -3
- data/bundler/lib/bundler/cli/install.rb +2 -2
- data/bundler/lib/bundler/cli/lock.rb +26 -23
- data/bundler/lib/bundler/cli/open.rb +5 -7
- data/bundler/lib/bundler/definition.rb +42 -25
- data/bundler/lib/bundler/env.rb +2 -2
- data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
- data/bundler/lib/bundler/injector.rb +1 -1
- data/bundler/lib/bundler/installer/parallel_installer.rb +0 -26
- data/bundler/lib/bundler/installer/standalone.rb +13 -6
- data/bundler/lib/bundler/lockfile_parser.rb +29 -24
- data/bundler/lib/bundler/man/bundle-add.1 +1 -1
- data/bundler/lib/bundler/man/bundle-binstubs.1 +1 -1
- data/bundler/lib/bundler/man/bundle-cache.1 +1 -1
- data/bundler/lib/bundler/man/bundle-check.1 +1 -1
- data/bundler/lib/bundler/man/bundle-clean.1 +1 -1
- data/bundler/lib/bundler/man/bundle-config.1 +1 -1
- data/bundler/lib/bundler/man/bundle-console.1 +1 -1
- data/bundler/lib/bundler/man/bundle-doctor.1 +1 -1
- data/bundler/lib/bundler/man/bundle-exec.1 +2 -2
- data/bundler/lib/bundler/man/bundle-exec.1.ronn +2 -3
- data/bundler/lib/bundler/man/bundle-gem.1 +1 -1
- data/bundler/lib/bundler/man/bundle-help.1 +1 -1
- data/bundler/lib/bundler/man/bundle-info.1 +1 -1
- data/bundler/lib/bundler/man/bundle-init.1 +1 -1
- data/bundler/lib/bundler/man/bundle-inject.1 +1 -1
- data/bundler/lib/bundler/man/bundle-install.1 +1 -1
- data/bundler/lib/bundler/man/bundle-list.1 +1 -1
- data/bundler/lib/bundler/man/bundle-lock.1 +1 -1
- data/bundler/lib/bundler/man/bundle-open.1 +1 -1
- data/bundler/lib/bundler/man/bundle-outdated.1 +1 -1
- data/bundler/lib/bundler/man/bundle-platform.1 +1 -1
- data/bundler/lib/bundler/man/bundle-plugin.1 +17 -17
- data/bundler/lib/bundler/man/bundle-plugin.1.ronn +5 -5
- data/bundler/lib/bundler/man/bundle-pristine.1 +1 -1
- data/bundler/lib/bundler/man/bundle-remove.1 +1 -1
- data/bundler/lib/bundler/man/bundle-show.1 +1 -1
- data/bundler/lib/bundler/man/bundle-update.1 +1 -1
- data/bundler/lib/bundler/man/bundle-version.1 +1 -1
- data/bundler/lib/bundler/man/bundle-viz.1 +1 -1
- data/bundler/lib/bundler/man/bundle.1 +1 -1
- data/bundler/lib/bundler/man/gemfile.5 +1 -1
- data/bundler/lib/bundler/resolver/package.rb +5 -0
- data/bundler/lib/bundler/resolver.rb +27 -7
- data/bundler/lib/bundler/ruby_version.rb +8 -1
- data/bundler/lib/bundler/settings.rb +53 -16
- data/bundler/lib/bundler/shared_helpers.rb +16 -1
- data/bundler/lib/bundler/source/git/git_proxy.rb +13 -4
- data/bundler/lib/bundler/spec_set.rb +2 -2
- data/bundler/lib/bundler/stub_specification.rb +4 -2
- data/bundler/lib/bundler/templates/newgem/Rakefile.tt +6 -2
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler/yaml_serializer.rb +6 -7
- data/lib/rubygems/basic_specification.rb +1 -1
- data/lib/rubygems/command.rb +2 -2
- data/lib/rubygems/command_manager.rb +1 -1
- data/lib/rubygems/commands/cert_command.rb +2 -2
- data/lib/rubygems/commands/check_command.rb +5 -1
- data/lib/rubygems/commands/cleanup_command.rb +1 -1
- data/lib/rubygems/commands/contents_command.rb +1 -1
- data/lib/rubygems/commands/help_command.rb +2 -2
- data/lib/rubygems/commands/open_command.rb +1 -3
- data/lib/rubygems/commands/owner_command.rb +1 -1
- data/lib/rubygems/commands/setup_command.rb +8 -8
- data/lib/rubygems/commands/specification_command.rb +5 -1
- data/lib/rubygems/commands/stale_command.rb +1 -1
- data/lib/rubygems/commands/update_command.rb +3 -3
- data/lib/rubygems/commands/yank_command.rb +1 -1
- data/lib/rubygems/config_file.rb +60 -13
- data/lib/rubygems/core_ext/kernel_gem.rb +1 -1
- data/lib/rubygems/core_ext/kernel_require.rb +1 -1
- data/lib/rubygems/defaults.rb +6 -2
- data/lib/rubygems/deprecate.rb +2 -1
- data/lib/rubygems/doctor.rb +1 -1
- data/lib/rubygems/errors.rb +1 -1
- data/lib/rubygems/exceptions.rb +1 -1
- data/lib/rubygems/ext/builder.rb +5 -4
- data/lib/rubygems/ext/cargo_builder.rb +2 -2
- data/lib/rubygems/gem_runner.rb +5 -1
- data/lib/rubygems/gemcutter_utilities.rb +2 -2
- data/lib/rubygems/indexer.rb +1 -1
- data/lib/rubygems/install_update_options.rb +1 -1
- data/lib/rubygems/installer.rb +8 -8
- data/lib/rubygems/package/old.rb +1 -1
- data/lib/rubygems/package/tar_writer.rb +1 -1
- data/lib/rubygems/package.rb +8 -8
- data/lib/rubygems/platform.rb +6 -2
- data/lib/rubygems/query_utils.rb +4 -4
- data/lib/rubygems/remote_fetcher.rb +10 -2
- data/lib/rubygems/request_set.rb +2 -1
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/api_set.rb +2 -1
- data/lib/rubygems/resolver/api_specification.rb +1 -1
- data/lib/rubygems/security/signer.rb +10 -2
- data/lib/rubygems/security/trust_dir.rb +4 -4
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/security_option.rb +1 -1
- data/lib/rubygems/source.rb +5 -1
- data/lib/rubygems/specification.rb +9 -10
- data/lib/rubygems/specification_policy.rb +5 -5
- data/lib/rubygems/uninstaller.rb +1 -1
- data/lib/rubygems/update_suggestion.rb +1 -1
- data/lib/rubygems/util.rb +5 -1
- data/lib/rubygems/version.rb +3 -2
- data/lib/rubygems/yaml_serializer.rb +88 -0
- data/lib/rubygems.rb +4 -4
- data/rubygems-update.gemspec +1 -1
- data/setup.rb +2 -0
- data/test/rubygems/bundler_test_gem.rb +6 -3
- data/test/rubygems/helper.rb +23 -15
- data/test/rubygems/package/tar_test_case.rb +2 -2
- data/test/rubygems/test_gem.rb +51 -26
- data/test/rubygems/test_gem_command.rb +3 -1
- data/test/rubygems/test_gem_commands_cert_command.rb +22 -22
- data/test/rubygems/test_gem_commands_cleanup_command.rb +2 -2
- data/test/rubygems/test_gem_commands_environment_command.rb +2 -1
- data/test/rubygems/test_gem_commands_exec_command.rb +5 -1
- data/test/rubygems/test_gem_commands_install_command.rb +3 -3
- data/test/rubygems/test_gem_commands_open_command.rb +5 -2
- data/test/rubygems/test_gem_commands_pristine_command.rb +2 -2
- data/test/rubygems/test_gem_commands_push_command.rb +7 -6
- data/test/rubygems/test_gem_commands_signin_command.rb +8 -8
- data/test/rubygems/test_gem_commands_uninstall_command.rb +1 -1
- data/test/rubygems/test_gem_commands_unpack_command.rb +2 -2
- data/test/rubygems/test_gem_config_file.rb +46 -12
- data/test/rubygems/test_gem_ext_cargo_builder.rb +2 -2
- data/test/rubygems/test_gem_gemcutter_utilities.rb +8 -5
- data/test/rubygems/test_gem_install_update_options.rb +3 -3
- data/test/rubygems/test_gem_installer.rb +15 -15
- data/test/rubygems/test_gem_package.rb +35 -34
- data/test/rubygems/test_gem_package_old.rb +1 -1
- data/test/rubygems/test_gem_package_tar_header.rb +3 -3
- data/test/rubygems/test_gem_package_tar_reader.rb +4 -4
- data/test/rubygems/test_gem_package_tar_writer.rb +28 -28
- data/test/rubygems/test_gem_rdoc.rb +2 -2
- data/test/rubygems/test_gem_remote_fetcher.rb +13 -9
- data/test/rubygems/test_gem_request.rb +5 -5
- data/test/rubygems/test_gem_request_connection_pools.rb +2 -1
- data/test/rubygems/test_gem_request_set_gem_dependency_api.rb +14 -7
- data/test/rubygems/test_gem_security.rb +2 -2
- data/test/rubygems/test_gem_security_signer.rb +2 -2
- data/test/rubygems/test_gem_security_trust_dir.rb +6 -6
- data/test/rubygems/test_gem_spec_fetcher.rb +2 -2
- data/test/rubygems/test_gem_specification.rb +29 -29
- data/test/rubygems/test_gem_update_suggestion.rb +12 -6
- data/test/rubygems/test_gem_util.rb +2 -2
- data/test/rubygems/test_gem_version.rb +4 -2
- data/test/rubygems/utilities.rb +2 -1
- metadata +4 -3
data/lib/rubygems/source.rb
CHANGED
@@ -137,7 +137,11 @@ class Gem::Source
|
|
137
137
|
|
138
138
|
if File.exist? local_spec
|
139
139
|
spec = Gem.read_binary local_spec
|
140
|
-
spec =
|
140
|
+
spec = begin
|
141
|
+
Marshal.load(spec)
|
142
|
+
rescue StandardError
|
143
|
+
nil
|
144
|
+
end
|
141
145
|
return spec if spec
|
142
146
|
end
|
143
147
|
|
@@ -427,11 +427,11 @@ class Gem::Specification < Gem::BasicSpecification
|
|
427
427
|
end
|
428
428
|
|
429
429
|
##
|
430
|
-
# The path in the gem for executable scripts. Usually '
|
430
|
+
# The path in the gem for executable scripts. Usually 'exe'
|
431
431
|
#
|
432
432
|
# Usage:
|
433
433
|
#
|
434
|
-
# spec.bindir = '
|
434
|
+
# spec.bindir = 'exe'
|
435
435
|
|
436
436
|
attr_accessor :bindir
|
437
437
|
|
@@ -1538,7 +1538,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1538
1538
|
else
|
1539
1539
|
executables
|
1540
1540
|
end
|
1541
|
-
rescue
|
1541
|
+
rescue StandardError
|
1542
1542
|
return nil
|
1543
1543
|
end
|
1544
1544
|
|
@@ -2362,13 +2362,13 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2362
2362
|
when Array then "[" + obj.map {|x| ruby_code x }.join(", ") + "]"
|
2363
2363
|
when Hash then
|
2364
2364
|
seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" }
|
2365
|
-
"{ #{seg.join(
|
2366
|
-
when Gem::Version then obj.to_s
|
2365
|
+
"{ #{seg.join(", ")} }"
|
2366
|
+
when Gem::Version then ruby_code(obj.to_s)
|
2367
2367
|
when DateLike then obj.strftime("%Y-%m-%d").dump
|
2368
2368
|
when Time then obj.strftime("%Y-%m-%d").dump
|
2369
2369
|
when Numeric then obj.inspect
|
2370
2370
|
when true, false, nil then obj.inspect
|
2371
|
-
when Gem::Platform then "Gem::Platform.new(#{obj.to_a
|
2371
|
+
when Gem::Platform then "Gem::Platform.new(#{ruby_code obj.to_a})"
|
2372
2372
|
when Gem::Requirement then
|
2373
2373
|
list = obj.as_list
|
2374
2374
|
"Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})"
|
@@ -2533,12 +2533,12 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2533
2533
|
end
|
2534
2534
|
|
2535
2535
|
if String === signing_key
|
2536
|
-
result << " s.signing_key = #{signing_key
|
2536
|
+
result << " s.signing_key = #{ruby_code signing_key}"
|
2537
2537
|
end
|
2538
2538
|
|
2539
2539
|
if @installed_by_version
|
2540
2540
|
result << nil
|
2541
|
-
result << " s.installed_by_version =
|
2541
|
+
result << " s.installed_by_version = #{ruby_code Gem::VERSION} if s.respond_to? :installed_by_version"
|
2542
2542
|
end
|
2543
2543
|
|
2544
2544
|
unless dependencies.empty?
|
@@ -2547,9 +2547,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
2547
2547
|
result << nil
|
2548
2548
|
|
2549
2549
|
dependencies.each do |dep|
|
2550
|
-
req = dep.requirements_list.inspect
|
2551
2550
|
dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK
|
2552
|
-
result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{
|
2551
|
+
result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{ruby_code dep.requirements_list})"
|
2553
2552
|
end
|
2554
2553
|
end
|
2555
2554
|
|
@@ -214,7 +214,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
214
214
|
end
|
215
215
|
|
216
216
|
" if #{dep.name} is semantically versioned, use:\n" \
|
217
|
-
" add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join
|
217
|
+
" add_#{dep.type}_dependency '#{dep.name}', '~> #{base.join "."}'#{bugfix}"
|
218
218
|
end
|
219
219
|
|
220
220
|
warning_messages << ["open-ended dependency on #{dep} is not recommended", recommendation].join("\n") + "\n"
|
@@ -234,7 +234,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
234
234
|
|
235
235
|
@specification.files.each do |file|
|
236
236
|
next unless File.file?(file)
|
237
|
-
next if File.stat(file).mode &
|
237
|
+
next if File.stat(file).mode & 0o444 == 0o444
|
238
238
|
warning "#{file} is not world-readable"
|
239
239
|
end
|
240
240
|
|
@@ -253,7 +253,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
253
253
|
@specification.instance_variable_get("@#{attrname}").nil?
|
254
254
|
end
|
255
255
|
return if nil_attributes.empty?
|
256
|
-
error "#{nil_attributes.join
|
256
|
+
error "#{nil_attributes.join ", "} must not be nil"
|
257
257
|
end
|
258
258
|
|
259
259
|
def validate_rubygems_version
|
@@ -300,7 +300,7 @@ duplicate dependency on #{dep}, (#{prev.requirement}) use:
|
|
300
300
|
non_files = @specification.files.reject {|x| File.file?(x) || File.symlink?(x) }
|
301
301
|
|
302
302
|
unless non_files.empty?
|
303
|
-
error "[\"#{non_files.join "
|
303
|
+
error "[\"#{non_files.join '", "'}\"] are not files"
|
304
304
|
end
|
305
305
|
end
|
306
306
|
|
@@ -377,7 +377,7 @@ license value '#{license}' is invalid. Use a license identifier from
|
|
377
377
|
http://spdx.org/licenses or '#{Gem::Licenses::NONSTANDARD}' for a nonstandard license,
|
378
378
|
or set it to nil if you don't want to specify a license.
|
379
379
|
WARNING
|
380
|
-
message += "Did you mean #{suggestions.map {|s| "'#{s}'" }.join(
|
380
|
+
message += "Did you mean #{suggestions.map {|s| "'#{s}'" }.join(", ")}?\n" unless suggestions.nil?
|
381
381
|
warning(message)
|
382
382
|
end
|
383
383
|
|
data/lib/rubygems/uninstaller.rb
CHANGED
data/lib/rubygems/util.rb
CHANGED
@@ -85,7 +85,11 @@ module Gem::Util
|
|
85
85
|
|
86
86
|
here = File.expand_path directory
|
87
87
|
loop do
|
88
|
-
|
88
|
+
begin
|
89
|
+
Dir.chdir here, &block
|
90
|
+
rescue StandardError
|
91
|
+
Errno::EACCES
|
92
|
+
end
|
89
93
|
|
90
94
|
new_here = File.expand_path("..", here)
|
91
95
|
return if new_here == here # toplevel
|
data/lib/rubygems/version.rb
CHANGED
@@ -131,7 +131,7 @@ require_relative "deprecate"
|
|
131
131
|
#
|
132
132
|
# == Preventing Version Catastrophe:
|
133
133
|
#
|
134
|
-
# From:
|
134
|
+
# From: https://www.zenspider.com/ruby/2008/10/rubygems-how-to-preventing-catastrophe.html
|
135
135
|
#
|
136
136
|
# Let's say you're depending on the fnord gem version 2.y.z. If you
|
137
137
|
# specify your dependency as ">= 2.0.0" then, you're good, right? What
|
@@ -366,7 +366,8 @@ class Gem::Version
|
|
366
366
|
i = 0
|
367
367
|
|
368
368
|
while i <= limit
|
369
|
-
lhs
|
369
|
+
lhs = lhsegments[i] || 0
|
370
|
+
rhs = rhsegments[i] || 0
|
370
371
|
i += 1
|
371
372
|
|
372
373
|
next if lhs == rhs
|
@@ -0,0 +1,88 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Gem
|
4
|
+
# A stub yaml serializer that can handle only hashes and strings (as of now).
|
5
|
+
module YAMLSerializer
|
6
|
+
module_function
|
7
|
+
|
8
|
+
def dump(hash)
|
9
|
+
yaml = String.new("---")
|
10
|
+
yaml << dump_hash(hash)
|
11
|
+
end
|
12
|
+
|
13
|
+
def dump_hash(hash)
|
14
|
+
yaml = String.new("\n")
|
15
|
+
hash.each do |k, v|
|
16
|
+
yaml << k << ":"
|
17
|
+
if v.is_a?(Hash)
|
18
|
+
yaml << dump_hash(v).gsub(/^(?!$)/, " ") # indent all non-empty lines
|
19
|
+
elsif v.is_a?(Array) # Expected to be array of strings
|
20
|
+
yaml << "\n- " << v.map {|s| s.to_s.gsub(/\s+/, " ").inspect }.join("\n- ") << "\n"
|
21
|
+
else
|
22
|
+
yaml << " " << v.to_s.gsub(/\s+/, " ").inspect << "\n"
|
23
|
+
end
|
24
|
+
end
|
25
|
+
yaml
|
26
|
+
end
|
27
|
+
|
28
|
+
ARRAY_REGEX = /
|
29
|
+
^
|
30
|
+
(?:[ ]*-[ ]) # '- ' before array items
|
31
|
+
(['"]?) # optional opening quote
|
32
|
+
(.*) # value
|
33
|
+
\1 # matching closing quote
|
34
|
+
$
|
35
|
+
/xo.freeze
|
36
|
+
|
37
|
+
HASH_REGEX = /
|
38
|
+
^
|
39
|
+
([ ]*) # indentations
|
40
|
+
(.+) # key
|
41
|
+
(?::(?=(?:\s|$))) # : (without the lookahead the #key includes this when : is present in value)
|
42
|
+
[ ]?
|
43
|
+
(['"]?) # optional opening quote
|
44
|
+
(.*) # value
|
45
|
+
\3 # matching closing quote
|
46
|
+
$
|
47
|
+
/xo.freeze
|
48
|
+
|
49
|
+
def load(str)
|
50
|
+
res = {}
|
51
|
+
stack = [res]
|
52
|
+
last_hash = nil
|
53
|
+
last_empty_key = nil
|
54
|
+
str.split(/\r?\n/).each do |line|
|
55
|
+
if match = HASH_REGEX.match(line)
|
56
|
+
indent, key, quote, val = match.captures
|
57
|
+
convert_to_backward_compatible_key!(key)
|
58
|
+
depth = indent.size / 2
|
59
|
+
if quote.empty? && val.empty?
|
60
|
+
new_hash = {}
|
61
|
+
stack[depth][key] = new_hash
|
62
|
+
stack[depth + 1] = new_hash
|
63
|
+
last_empty_key = key
|
64
|
+
last_hash = stack[depth]
|
65
|
+
else
|
66
|
+
stack[depth][key] = val
|
67
|
+
end
|
68
|
+
elsif match = ARRAY_REGEX.match(line)
|
69
|
+
_, val = match.captures
|
70
|
+
last_hash[last_empty_key] = [] unless last_hash[last_empty_key].is_a?(Array)
|
71
|
+
|
72
|
+
last_hash[last_empty_key].push(val)
|
73
|
+
end
|
74
|
+
end
|
75
|
+
res
|
76
|
+
end
|
77
|
+
|
78
|
+
# for settings' keys
|
79
|
+
def convert_to_backward_compatible_key!(key)
|
80
|
+
key << "/" if /https?:/i.match?(key) && !%r{/\Z}.match?(key)
|
81
|
+
key.gsub!(".", "__")
|
82
|
+
end
|
83
|
+
|
84
|
+
class << self
|
85
|
+
private :dump_hash, :convert_to_backward_compatible_key!
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
data/lib/rubygems.rb
CHANGED
@@ -9,7 +9,7 @@
|
|
9
9
|
require "rbconfig"
|
10
10
|
|
11
11
|
module Gem
|
12
|
-
VERSION = "3.4.
|
12
|
+
VERSION = "3.4.21"
|
13
13
|
end
|
14
14
|
|
15
15
|
# Must be first since it unloads the prelude from 1.9.2
|
@@ -439,7 +439,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
439
439
|
|
440
440
|
def self.ensure_subdirectories(dir, mode, subdirs) # :nodoc:
|
441
441
|
old_umask = File.umask
|
442
|
-
File.umask old_umask |
|
442
|
+
File.umask old_umask | 0o02
|
443
443
|
|
444
444
|
options = {}
|
445
445
|
|
@@ -582,7 +582,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
582
582
|
|
583
583
|
##
|
584
584
|
# The number of paths in the +$LOAD_PATH+ from activated gems. Used to
|
585
|
-
# prioritize +-I+ and
|
585
|
+
# prioritize +-I+ and <code>ENV['RUBYLIB']</code> entries during +require+.
|
586
586
|
|
587
587
|
def self.activated_gem_paths
|
588
588
|
@activated_gem_paths ||= 0
|
@@ -914,7 +914,7 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
914
914
|
# Glob pattern for require-able path suffixes.
|
915
915
|
|
916
916
|
def self.suffix_pattern
|
917
|
-
@suffix_pattern ||= "{#{suffixes.join(
|
917
|
+
@suffix_pattern ||= "{#{suffixes.join(",")}}"
|
918
918
|
end
|
919
919
|
|
920
920
|
##
|
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.4.
|
5
|
+
s.version = "3.4.21"
|
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
@@ -384,8 +384,10 @@ You may need to `bundle install` to install missing gems
|
|
384
384
|
end
|
385
385
|
|
386
386
|
def with_path_and_rubyopt(path_value, rubyopt_value)
|
387
|
-
path
|
388
|
-
|
387
|
+
path = ENV["PATH"]
|
388
|
+
ENV["PATH"] = path_value
|
389
|
+
rubyopt = ENV["RUBYOPT"]
|
390
|
+
ENV["RUBYOPT"] = rubyopt_value
|
389
391
|
|
390
392
|
yield
|
391
393
|
ensure
|
@@ -394,7 +396,8 @@ You may need to `bundle install` to install missing gems
|
|
394
396
|
end
|
395
397
|
|
396
398
|
def with_rubygems_gemdeps(value)
|
397
|
-
rubygems_gemdeps
|
399
|
+
rubygems_gemdeps = ENV["RUBYGEMS_GEMDEPS"]
|
400
|
+
ENV["RUBYGEMS_GEMDEPS"] = value
|
398
401
|
|
399
402
|
yield
|
400
403
|
ensure
|
data/test/rubygems/helper.rb
CHANGED
@@ -120,9 +120,11 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
120
120
|
_synchronize do
|
121
121
|
require "tempfile"
|
122
122
|
|
123
|
-
captured_stdout
|
123
|
+
captured_stdout = Tempfile.new("out")
|
124
|
+
captured_stderr = Tempfile.new("err")
|
124
125
|
|
125
|
-
orig_stdout
|
126
|
+
orig_stdout = $stdout.dup
|
127
|
+
orig_stderr = $stderr.dup
|
126
128
|
$stdout.reopen captured_stdout
|
127
129
|
$stderr.reopen captured_stderr
|
128
130
|
|
@@ -335,14 +337,18 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
335
337
|
ruby
|
336
338
|
end
|
337
339
|
|
338
|
-
@git = ENV["GIT"] || "git#{RbConfig::CONFIG[
|
340
|
+
@git = ENV["GIT"] || "git#{RbConfig::CONFIG["EXEEXT"]}"
|
339
341
|
|
340
342
|
Gem.ensure_gem_subdirectories @gemhome
|
341
343
|
Gem.ensure_default_gem_subdirectories @gemhome
|
342
344
|
|
343
345
|
@orig_LOAD_PATH = $LOAD_PATH.dup
|
344
346
|
$LOAD_PATH.map! do |s|
|
345
|
-
expand_path =
|
347
|
+
expand_path = begin
|
348
|
+
File.realpath(s)
|
349
|
+
rescue StandardError
|
350
|
+
File.expand_path(s)
|
351
|
+
end
|
346
352
|
if expand_path != s
|
347
353
|
expand_path.tap(&Gem::UNTAINT)
|
348
354
|
if s.instance_variable_defined?(:@gem_prelude_index)
|
@@ -484,7 +490,7 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
484
490
|
@temp_cred = File.join(@userhome, ".gem", "credentials")
|
485
491
|
FileUtils.mkdir_p File.dirname(@temp_cred)
|
486
492
|
File.write @temp_cred, ":rubygems_api_key: 701229f217cdf23b1344c7b4b54ca97"
|
487
|
-
File.chmod
|
493
|
+
File.chmod 0o600, @temp_cred
|
488
494
|
end
|
489
495
|
|
490
496
|
def credential_teardown
|
@@ -686,11 +692,8 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
686
692
|
# Load a YAML file, the psych 3 way
|
687
693
|
|
688
694
|
def load_yaml_file(file)
|
689
|
-
|
690
|
-
|
691
|
-
else
|
692
|
-
Psych.load_file(file)
|
693
|
-
end
|
695
|
+
require "rubygems/config_file"
|
696
|
+
Gem::ConfigFile.load_with_rubygems_config_hash(File.read(file))
|
694
697
|
end
|
695
698
|
|
696
699
|
def all_spec_names
|
@@ -1274,7 +1277,7 @@ Also, a list:
|
|
1274
1277
|
ruby = ENV["RUBY"]
|
1275
1278
|
return ruby if ruby
|
1276
1279
|
ruby = "ruby"
|
1277
|
-
rubyexe = "#{ruby}#{RbConfig::CONFIG[
|
1280
|
+
rubyexe = "#{ruby}#{RbConfig::CONFIG["EXEEXT"]}"
|
1278
1281
|
|
1279
1282
|
3.times do
|
1280
1283
|
if File.exist?(ruby) && File.executable?(ruby) && !File.directory?(ruby)
|
@@ -1325,7 +1328,8 @@ Also, a list:
|
|
1325
1328
|
end
|
1326
1329
|
|
1327
1330
|
def silence_warnings
|
1328
|
-
old_verbose
|
1331
|
+
old_verbose = $VERBOSE
|
1332
|
+
$VERBOSE = false
|
1329
1333
|
yield
|
1330
1334
|
ensure
|
1331
1335
|
$VERBOSE = old_verbose
|
@@ -1349,8 +1353,8 @@ Also, a list:
|
|
1349
1353
|
end
|
1350
1354
|
end
|
1351
1355
|
|
1352
|
-
@@good_rake = "#{rubybin} #{escape_path(__dir__,
|
1353
|
-
@@bad_rake = "#{rubybin} #{escape_path(__dir__,
|
1356
|
+
@@good_rake = "#{rubybin} #{escape_path(__dir__, "good_rake.rb")}"
|
1357
|
+
@@bad_rake = "#{rubybin} #{escape_path(__dir__, "bad_rake.rb")}"
|
1354
1358
|
|
1355
1359
|
##
|
1356
1360
|
# Construct a new Gem::Dependency.
|
@@ -1536,7 +1540,11 @@ Also, a list:
|
|
1536
1540
|
# <tt>test/rubygems/</tt>.
|
1537
1541
|
|
1538
1542
|
def self.cert_path(cert_name)
|
1539
|
-
if 32 ==
|
1543
|
+
if 32 == begin
|
1544
|
+
Time.at(2**32)
|
1545
|
+
rescue StandardError
|
1546
|
+
32
|
1547
|
+
end
|
1540
1548
|
cert_file = "#{__dir__}/#{cert_name}_cert_32.pem"
|
1541
1549
|
|
1542
1550
|
return cert_file if File.exist? cert_file
|
@@ -163,11 +163,11 @@ class Gem::Package::TarTestCase < Gem::TestCase
|
|
163
163
|
data_tgz = util_tar_gz(&block)
|
164
164
|
util_tar do |tar|
|
165
165
|
if spec
|
166
|
-
tar.add_file "metadata.gz",
|
166
|
+
tar.add_file "metadata.gz", 0o444 do |io|
|
167
167
|
io.write util_gzip(spec.to_yaml)
|
168
168
|
end
|
169
169
|
end
|
170
|
-
tar.add_file "data.tar.gz",
|
170
|
+
tar.add_file "data.tar.gz", 0o644 do |io|
|
171
171
|
io.write data_tgz.string
|
172
172
|
end
|
173
173
|
end
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -132,7 +132,7 @@ class TestGem < Gem::TestCase
|
|
132
132
|
end
|
133
133
|
|
134
134
|
def test_self_install_permissions_umask_077
|
135
|
-
umask = File.umask(
|
135
|
+
umask = File.umask(0o77)
|
136
136
|
assert_self_install_permissions
|
137
137
|
ensure
|
138
138
|
File.umask(umask)
|
@@ -152,11 +152,11 @@ class TestGem < Gem::TestCase
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def assert_self_install_permissions(format_executable: false)
|
155
|
-
mask = win_platform? ?
|
155
|
+
mask = win_platform? ? 0o700 : 0o777
|
156
156
|
options = {
|
157
|
-
:dir_mode =>
|
158
|
-
:prog_mode => win_platform? ?
|
159
|
-
:data_mode =>
|
157
|
+
:dir_mode => 0o500,
|
158
|
+
:prog_mode => win_platform? ? 0o410 : 0o510,
|
159
|
+
:data_mode => 0o640,
|
160
160
|
:wrappers => true,
|
161
161
|
:format_executable => format_executable,
|
162
162
|
}
|
@@ -165,7 +165,7 @@ class TestGem < Gem::TestCase
|
|
165
165
|
Dir.mkdir "data"
|
166
166
|
|
167
167
|
File.write "bin/foo", "#!/usr/bin/env ruby\n"
|
168
|
-
File.chmod
|
168
|
+
File.chmod 0o755, "bin/foo"
|
169
169
|
|
170
170
|
File.write "data/foo.txt", "blah\n"
|
171
171
|
|
@@ -201,7 +201,7 @@ class TestGem < Gem::TestCase
|
|
201
201
|
end
|
202
202
|
assert_equal(expected, result)
|
203
203
|
ensure
|
204
|
-
File.chmod(
|
204
|
+
File.chmod(0o755, *Dir.glob(@gemhome + "/gems/**/").map {|path| path.tap(&Gem::UNTAINT) })
|
205
205
|
end
|
206
206
|
|
207
207
|
def test_require_missing
|
@@ -639,12 +639,12 @@ class TestGem < Gem::TestCase
|
|
639
639
|
FileUtils.rm_r @gemhome
|
640
640
|
Gem.use_paths @gemhome
|
641
641
|
|
642
|
-
Gem.ensure_gem_subdirectories @gemhome,
|
642
|
+
Gem.ensure_gem_subdirectories @gemhome, 0o750
|
643
643
|
|
644
644
|
assert_directory_exists File.join(@gemhome, "cache")
|
645
645
|
|
646
|
-
assert_equal
|
647
|
-
assert_equal
|
646
|
+
assert_equal 0o750, File::Stat.new(@gemhome).mode & 0o777
|
647
|
+
assert_equal 0o750, File::Stat.new(File.join(@gemhome, "cache")).mode & 0o777
|
648
648
|
end unless win_platform?
|
649
649
|
|
650
650
|
def test_self_ensure_gem_directories_safe_permissions
|
@@ -655,17 +655,21 @@ class TestGem < Gem::TestCase
|
|
655
655
|
File.umask 0
|
656
656
|
Gem.ensure_gem_subdirectories @gemhome
|
657
657
|
|
658
|
-
assert_equal 0, File::Stat.new(@gemhome).mode &
|
659
|
-
assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode &
|
658
|
+
assert_equal 0, File::Stat.new(@gemhome).mode & 0o02
|
659
|
+
assert_equal 0, File::Stat.new(File.join(@gemhome, "cache")).mode & 0o02
|
660
660
|
ensure
|
661
661
|
File.umask old_umask
|
662
662
|
end unless win_platform?
|
663
663
|
|
664
664
|
def test_self_ensure_gem_directories_missing_parents
|
665
665
|
gemdir = File.join @tempdir, "a/b/c/gemdir"
|
666
|
-
|
666
|
+
begin
|
667
|
+
FileUtils.rm_rf File.join(@tempdir, "a")
|
668
|
+
rescue StandardError
|
669
|
+
nil
|
670
|
+
end
|
667
671
|
refute File.exist?(File.join(@tempdir, "a")),
|
668
|
-
"manually remove #{File.join @tempdir,
|
672
|
+
"manually remove #{File.join @tempdir, "a"}, tests are broken"
|
669
673
|
Gem.use_paths gemdir
|
670
674
|
|
671
675
|
Gem.ensure_gem_subdirectories gemdir
|
@@ -676,34 +680,42 @@ class TestGem < Gem::TestCase
|
|
676
680
|
unless win_platform? || Process.uid.zero? # only for FS that support write protection
|
677
681
|
def test_self_ensure_gem_directories_write_protected
|
678
682
|
gemdir = File.join @tempdir, "egd"
|
679
|
-
|
683
|
+
begin
|
684
|
+
FileUtils.rm_r gemdir
|
685
|
+
rescue StandardError
|
686
|
+
nil
|
687
|
+
end
|
680
688
|
refute File.exist?(gemdir), "manually remove #{gemdir}, tests are broken"
|
681
689
|
FileUtils.mkdir_p gemdir
|
682
|
-
FileUtils.chmod
|
690
|
+
FileUtils.chmod 0o400, gemdir
|
683
691
|
Gem.use_paths gemdir
|
684
692
|
|
685
693
|
Gem.ensure_gem_subdirectories gemdir
|
686
694
|
|
687
695
|
refute File.exist?(util_cache_dir)
|
688
696
|
ensure
|
689
|
-
FileUtils.chmod
|
697
|
+
FileUtils.chmod 0o600, gemdir
|
690
698
|
end
|
691
699
|
|
692
700
|
def test_self_ensure_gem_directories_write_protected_parents
|
693
701
|
parent = File.join(@tempdir, "egd")
|
694
702
|
gemdir = "#{parent}/a/b/c"
|
695
703
|
|
696
|
-
|
704
|
+
begin
|
705
|
+
FileUtils.rm_r parent
|
706
|
+
rescue StandardError
|
707
|
+
nil
|
708
|
+
end
|
697
709
|
refute File.exist?(parent), "manually remove #{parent}, tests are broken"
|
698
710
|
FileUtils.mkdir_p parent
|
699
|
-
FileUtils.chmod
|
711
|
+
FileUtils.chmod 0o400, parent
|
700
712
|
Gem.use_paths(gemdir)
|
701
713
|
|
702
714
|
Gem.ensure_gem_subdirectories gemdir
|
703
715
|
|
704
716
|
refute File.exist? File.join(gemdir, "gems")
|
705
717
|
ensure
|
706
|
-
FileUtils.chmod
|
718
|
+
FileUtils.chmod 0o600, parent
|
707
719
|
end
|
708
720
|
|
709
721
|
def test_self_ensure_gem_directories_non_existent_paths
|
@@ -965,11 +977,11 @@ class TestGem < Gem::TestCase
|
|
965
977
|
pend "chmod not supported" if Gem.win_platform?
|
966
978
|
|
967
979
|
begin
|
968
|
-
File.chmod
|
980
|
+
File.chmod 0o444, "test"
|
969
981
|
|
970
982
|
assert_equal ["\xCF", "\x80"], Gem.read_binary("test").chars.to_a
|
971
983
|
ensure
|
972
|
-
File.chmod
|
984
|
+
File.chmod 0o644, "test"
|
973
985
|
end
|
974
986
|
end
|
975
987
|
|
@@ -1030,7 +1042,8 @@ class TestGem < Gem::TestCase
|
|
1030
1042
|
end
|
1031
1043
|
|
1032
1044
|
def test_self_ruby_api_version
|
1033
|
-
orig_ruby_version
|
1045
|
+
orig_ruby_version = RbConfig::CONFIG["ruby_version"]
|
1046
|
+
RbConfig::CONFIG["ruby_version"] = "1.2.3"
|
1034
1047
|
|
1035
1048
|
Gem.instance_variable_set :@ruby_api_version, nil
|
1036
1049
|
|
@@ -1503,19 +1516,31 @@ class TestGem < Gem::TestCase
|
|
1503
1516
|
|
1504
1517
|
def test_load_env_plugins
|
1505
1518
|
with_plugin("load") { Gem.load_env_plugins }
|
1506
|
-
|
1519
|
+
begin
|
1520
|
+
assert_equal :loaded, TEST_PLUGIN_LOAD
|
1521
|
+
rescue StandardError
|
1522
|
+
nil
|
1523
|
+
end
|
1507
1524
|
|
1508
1525
|
util_remove_interrupt_command
|
1509
1526
|
|
1510
1527
|
# Should attempt to cause a StandardError
|
1511
1528
|
with_plugin("standarderror") { Gem.load_env_plugins }
|
1512
|
-
|
1529
|
+
begin
|
1530
|
+
assert_equal :loaded, TEST_PLUGIN_STANDARDERROR
|
1531
|
+
rescue StandardError
|
1532
|
+
nil
|
1533
|
+
end
|
1513
1534
|
|
1514
1535
|
util_remove_interrupt_command
|
1515
1536
|
|
1516
1537
|
# Should attempt to cause an Exception
|
1517
1538
|
with_plugin("exception") { Gem.load_env_plugins }
|
1518
|
-
|
1539
|
+
begin
|
1540
|
+
assert_equal :loaded, TEST_PLUGIN_EXCEPTION
|
1541
|
+
rescue StandardError
|
1542
|
+
nil
|
1543
|
+
end
|
1519
1544
|
end
|
1520
1545
|
|
1521
1546
|
def test_gem_path_ordering
|
@@ -56,7 +56,9 @@ class TestGemCommand < Gem::TestCase
|
|
56
56
|
end
|
57
57
|
|
58
58
|
def test_self_extra_args
|
59
|
-
verbose
|
59
|
+
verbose = $VERBOSE
|
60
|
+
$VERBOSE = nil
|
61
|
+
separator = $;
|
60
62
|
extra_args = Gem::Command.extra_args
|
61
63
|
|
62
64
|
Gem::Command.extra_args = %w[--all]
|