rubygems-update 3.3.4 → 3.3.5
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/bundler/CHANGELOG.md +13 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli/update.rb +6 -2
- data/bundler/lib/bundler/cli.rb +3 -10
- data/bundler/lib/bundler/compact_index_client/cache.rb +0 -9
- data/bundler/lib/bundler/compact_index_client.rb +0 -6
- data/bundler/lib/bundler/definition.rb +0 -8
- data/bundler/lib/bundler/endpoint_specification.rb +21 -3
- data/bundler/lib/bundler/fetcher/compact_index.rb +0 -10
- data/bundler/lib/bundler/fetcher/index.rb +0 -26
- data/bundler/lib/bundler/fetcher.rb +4 -9
- data/bundler/lib/bundler/gem_helper.rb +2 -2
- data/bundler/lib/bundler/lazy_specification.rb +2 -2
- data/bundler/lib/bundler/lockfile_generator.rb +1 -1
- data/bundler/lib/bundler/resolver/spec_group.rb +1 -1
- data/bundler/lib/bundler/resolver.rb +2 -8
- data/bundler/lib/bundler/self_manager.rb +103 -29
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/inject_into_file.rb +1 -4
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems/commands/fetch_command.rb +27 -8
- data/lib/rubygems/package/old.rb +1 -1
- data/lib/rubygems/package.rb +1 -1
- data/lib/rubygems/psych_additions.rb +1 -1
- data/lib/rubygems/resolver/installer_set.rb +9 -9
- data/lib/rubygems/safe_yaml.rb +8 -8
- data/lib/rubygems/security.rb +1 -1
- data/lib/rubygems/specification.rb +4 -4
- data/lib/rubygems/stub_specification.rb +0 -3
- data/lib/rubygems.rb +4 -11
- data/rubygems-update.gemspec +1 -1
- data/test/rubygems/helper.rb +6 -6
- data/test/rubygems/test_gem_commands_fetch_command.rb +97 -0
- data/test/rubygems/test_gem_commands_install_command.rb +16 -0
- data/test/rubygems/test_gem_package.rb +2 -2
- data/test/rubygems/test_gem_stub_specification.rb +0 -16
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9648fb20873191a9544a114fb8924f9f08625fa63d590a3a0434e3b2b95b516d
|
4
|
+
data.tar.gz: b29121744e804674e10ae19f1cbc9525a8c8c0ee73072e27baf726479b995180
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5b8f751c2bd5a5bca0b8c7baa474ac226cb697275582681f14cb57326279e5f17db249803f33177344f7ebb199fef3c1c396c7aaf749950b3b8bb62e47b16dce
|
7
|
+
data.tar.gz: c5be5acbc735daa56571bbf4b51a1edf0271c8c6d56d7a7a403401a03863580669cdca71b9d426434701200a2cd10e20b215d1b6b17f8d1bebe4cd2bcdf91ed2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,25 @@
|
|
1
|
+
# 3.3.5 / 2022-01-12
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
* Don't activate `yaml` gem from RubyGems. Pull request #5266 by
|
6
|
+
deivid-rodriguez
|
7
|
+
* Let `gem fetch` understand `<gem>:<version>` syntax and
|
8
|
+
`--[no-]suggestions` flag. Pull request #5242 by ximenasandoval
|
9
|
+
* Installs bundler 2.3.5 as a default gem.
|
10
|
+
|
11
|
+
## Bug fixes:
|
12
|
+
|
13
|
+
* Fix `gem install <non-existent-gem> --force` crash. Pull request #5262
|
14
|
+
by deivid-rodriguez
|
15
|
+
* Fix longstanding `gem install` failure on JRuby. Pull request #5228 by
|
16
|
+
deivid-rodriguez
|
17
|
+
|
18
|
+
## Documentation:
|
19
|
+
|
20
|
+
* Markup `Gem::Specification` documentation with RDoc notations. Pull
|
21
|
+
request #5268 by nobu
|
22
|
+
|
1
23
|
# 3.3.4 / 2021-12-29
|
2
24
|
|
3
25
|
## Enhancements:
|
data/bundler/CHANGELOG.md
CHANGED
@@ -1,3 +1,16 @@
|
|
1
|
+
# 2.3.5 (January 12, 2022)
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
- Make `bundle update --bundler` actually lock to the latest bundler version (even if not yet installed) [#5182](https://github.com/rubygems/rubygems/pull/5182)
|
6
|
+
- Use thor-1.2.1 [#5260](https://github.com/rubygems/rubygems/pull/5260)
|
7
|
+
- Exclude bin directory for newgem template [#5259](https://github.com/rubygems/rubygems/pull/5259)
|
8
|
+
|
9
|
+
## Bug fixes:
|
10
|
+
|
11
|
+
- Fix metadata requirements being bypassed when custom gem servers are used [#5256](https://github.com/rubygems/rubygems/pull/5256)
|
12
|
+
- Fix `rake build:checksum` writing checksum of package path, not package contents [#5250](https://github.com/rubygems/rubygems/pull/5250)
|
13
|
+
|
1
14
|
# 2.3.4 (December 29, 2021)
|
2
15
|
|
3
16
|
## Enhancements:
|
@@ -4,8 +4,8 @@ module Bundler
|
|
4
4
|
# Represents metadata from when the Bundler gem was built.
|
5
5
|
module BuildMetadata
|
6
6
|
# begin ivars
|
7
|
-
@built_at = "
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2022-01-12".freeze
|
8
|
+
@git_commit_sha = "a13d015fcb".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
@@ -11,12 +11,16 @@ module Bundler
|
|
11
11
|
def run
|
12
12
|
Bundler.ui.level = "warn" if options[:quiet]
|
13
13
|
|
14
|
+
update_bundler = options[:bundler]
|
15
|
+
|
16
|
+
Bundler.self_manager.update_bundler_and_restart_with_it_if_needed(update_bundler) if update_bundler
|
17
|
+
|
14
18
|
Plugin.gemfile_install(Bundler.default_gemfile) if Bundler.feature_flag.plugins?
|
15
19
|
|
16
20
|
sources = Array(options[:source])
|
17
21
|
groups = Array(options[:group]).map(&:to_sym)
|
18
22
|
|
19
|
-
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !
|
23
|
+
full_update = gems.empty? && sources.empty? && groups.empty? && !options[:ruby] && !update_bundler
|
20
24
|
|
21
25
|
if full_update && !options[:all]
|
22
26
|
if Bundler.feature_flag.update_requires_all_flag?
|
@@ -49,7 +53,7 @@ module Bundler
|
|
49
53
|
|
50
54
|
Bundler.definition(:gems => gems, :sources => sources, :ruby => options[:ruby],
|
51
55
|
:conservative => conservative,
|
52
|
-
:bundler =>
|
56
|
+
:bundler => update_bundler)
|
53
57
|
end
|
54
58
|
|
55
59
|
Bundler::CLI::Common.configure_gem_version_promoter(Bundler.definition, options)
|
data/bundler/lib/bundler/cli.rb
CHANGED
@@ -809,17 +809,10 @@ module Bundler
|
|
809
809
|
|
810
810
|
current = Gem::Version.new(VERSION)
|
811
811
|
return if current >= latest
|
812
|
-
latest_installed = Bundler.rubygems.find_name("bundler").map(&:version).max
|
813
812
|
|
814
|
-
|
815
|
-
|
816
|
-
|
817
|
-
suggestion = "#{installation}\n#{suggestion}" if latest_installed < latest
|
818
|
-
else
|
819
|
-
suggestion = installation
|
820
|
-
end
|
821
|
-
|
822
|
-
Bundler.ui.warn "The latest bundler is #{latest}, but you are currently running #{current}.\n#{suggestion}"
|
813
|
+
Bundler.ui.warn \
|
814
|
+
"The latest bundler is #{latest}, but you are currently running #{current}.\n" \
|
815
|
+
"To update to the most recent version, run `bundle update --bundler`"
|
823
816
|
rescue RuntimeError
|
824
817
|
nil
|
825
818
|
end
|
@@ -76,15 +76,6 @@ module Bundler
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
def specific_dependency(name, version, platform)
|
80
|
-
pattern = [version, platform].compact.join("-")
|
81
|
-
return nil if pattern.empty?
|
82
|
-
|
83
|
-
gem_lines = info_path(name).read
|
84
|
-
gem_line = gem_lines[/^#{Regexp.escape(pattern)}\b.*/, 0]
|
85
|
-
gem_line ? parse_gem(gem_line) : nil
|
86
|
-
end
|
87
|
-
|
88
79
|
private
|
89
80
|
|
90
81
|
def lines(path)
|
@@ -73,12 +73,6 @@ module Bundler
|
|
73
73
|
end.flatten(1)
|
74
74
|
end
|
75
75
|
|
76
|
-
def spec(name, version, platform = nil)
|
77
|
-
Bundler::CompactIndexClient.debug { "spec(name = #{name}, version = #{version}, platform = #{platform})" }
|
78
|
-
update_info(name)
|
79
|
-
@cache.specific_dependency(name, version, platform)
|
80
|
-
end
|
81
|
-
|
82
76
|
def update_and_parse_checksums!
|
83
77
|
Bundler::CompactIndexClient.debug { "update_and_parse_checksums!" }
|
84
78
|
return @info_checksums_by_name if @parsed_checksums
|
@@ -309,14 +309,6 @@ module Bundler
|
|
309
309
|
end
|
310
310
|
end
|
311
311
|
|
312
|
-
def locked_bundler_version
|
313
|
-
if @locked_bundler_version && @locked_bundler_version < Gem::Version.new(Bundler::VERSION)
|
314
|
-
new_version = Bundler::VERSION
|
315
|
-
end
|
316
|
-
|
317
|
-
new_version || @locked_bundler_version || Bundler::VERSION
|
318
|
-
end
|
319
|
-
|
320
312
|
def locked_ruby_version
|
321
313
|
return unless ruby_version
|
322
314
|
if @unlock[:ruby] || !@locked_ruby_version
|
@@ -5,14 +5,15 @@ module Bundler
|
|
5
5
|
class EndpointSpecification < Gem::Specification
|
6
6
|
include MatchPlatform
|
7
7
|
|
8
|
-
attr_reader :name, :version, :platform, :
|
8
|
+
attr_reader :name, :version, :platform, :checksum
|
9
9
|
attr_accessor :source, :remote, :dependencies
|
10
10
|
|
11
|
-
def initialize(name, version, platform, dependencies, metadata = nil)
|
11
|
+
def initialize(name, version, platform, spec_fetcher, dependencies, metadata = nil)
|
12
12
|
super()
|
13
13
|
@name = name
|
14
14
|
@version = Gem::Version.create version
|
15
15
|
@platform = platform
|
16
|
+
@spec_fetcher = spec_fetcher
|
16
17
|
@dependencies = dependencies.map {|dep, reqs| build_dependency(dep, reqs) }
|
17
18
|
|
18
19
|
@loaded_from = nil
|
@@ -21,6 +22,14 @@ module Bundler
|
|
21
22
|
parse_metadata(metadata)
|
22
23
|
end
|
23
24
|
|
25
|
+
def required_ruby_version
|
26
|
+
@required_ruby_version ||= _remote_specification.required_ruby_version
|
27
|
+
end
|
28
|
+
|
29
|
+
def required_rubygems_version
|
30
|
+
@required_rubygems_version ||= _remote_specification.required_rubygems_version
|
31
|
+
end
|
32
|
+
|
24
33
|
def fetch_platform
|
25
34
|
@platform
|
26
35
|
end
|
@@ -105,12 +114,21 @@ module Bundler
|
|
105
114
|
|
106
115
|
private
|
107
116
|
|
117
|
+
def _remote_specification
|
118
|
+
@_remote_specification ||= @spec_fetcher.fetch_spec([@name, @version, @platform])
|
119
|
+
end
|
120
|
+
|
108
121
|
def local_specification_path
|
109
122
|
"#{base_dir}/specifications/#{full_name}.gemspec"
|
110
123
|
end
|
111
124
|
|
112
125
|
def parse_metadata(data)
|
113
|
-
|
126
|
+
unless data
|
127
|
+
@required_ruby_version = nil
|
128
|
+
@required_rubygems_version = nil
|
129
|
+
return
|
130
|
+
end
|
131
|
+
|
114
132
|
data.each do |k, v|
|
115
133
|
next unless v
|
116
134
|
case k.to_s
|
@@ -57,16 +57,6 @@ module Bundler
|
|
57
57
|
gem_info
|
58
58
|
end
|
59
59
|
|
60
|
-
def fetch_spec(spec)
|
61
|
-
spec -= [nil, "ruby", ""]
|
62
|
-
contents = compact_index_client.spec(*spec)
|
63
|
-
return nil if contents.nil?
|
64
|
-
contents.unshift(spec.first)
|
65
|
-
contents[3].map! {|d| Gem::Dependency.new(*d) }
|
66
|
-
EndpointSpecification.new(*contents)
|
67
|
-
end
|
68
|
-
compact_index_request :fetch_spec
|
69
|
-
|
70
60
|
def available?
|
71
61
|
unless SharedHelpers.md5_available?
|
72
62
|
Bundler.ui.debug("FIPS mode is enabled, bundler can't use the CompactIndex API")
|
@@ -21,32 +21,6 @@ module Bundler
|
|
21
21
|
raise HTTPError, "Could not fetch specs from #{display_uri} due to underlying error <#{e.message}>"
|
22
22
|
end
|
23
23
|
end
|
24
|
-
|
25
|
-
def fetch_spec(spec)
|
26
|
-
spec -= [nil, "ruby", ""]
|
27
|
-
spec_file_name = "#{spec.join "-"}.gemspec"
|
28
|
-
|
29
|
-
uri = Bundler::URI.parse("#{remote_uri}#{Gem::MARSHAL_SPEC_DIR}#{spec_file_name}.rz")
|
30
|
-
if uri.scheme == "file"
|
31
|
-
path = Bundler.rubygems.correct_for_windows_path(uri.path)
|
32
|
-
Bundler.load_marshal Bundler.rubygems.inflate(Gem.read_binary(path))
|
33
|
-
elsif cached_spec_path = gemspec_cached_path(spec_file_name)
|
34
|
-
Bundler.load_gemspec(cached_spec_path)
|
35
|
-
else
|
36
|
-
Bundler.load_marshal Bundler.rubygems.inflate(downloader.fetch(uri).body)
|
37
|
-
end
|
38
|
-
rescue MarshalError
|
39
|
-
raise HTTPError, "Gemspec #{spec} contained invalid data.\n" \
|
40
|
-
"Your network or your gem server is probably having issues right now."
|
41
|
-
end
|
42
|
-
|
43
|
-
private
|
44
|
-
|
45
|
-
# cached gem specification path, if one exists
|
46
|
-
def gemspec_cached_path(spec_file_name)
|
47
|
-
paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
|
48
|
-
paths.find {|path| File.file? path }
|
49
|
-
end
|
50
24
|
end
|
51
25
|
end
|
52
26
|
end
|
@@ -129,17 +129,15 @@ module Bundler
|
|
129
129
|
specs = fetchers.last.specs(gem_names)
|
130
130
|
else
|
131
131
|
specs = []
|
132
|
-
fetchers
|
133
|
-
|
134
|
-
break unless f.api_fetcher? && !gem_names || !specs = f.specs(gem_names)
|
135
|
-
fetchers.delete(f)
|
132
|
+
@fetchers = fetchers.drop_while do |f|
|
133
|
+
!f.available? || (f.api_fetcher? && !gem_names) || !specs = f.specs(gem_names)
|
136
134
|
end
|
137
135
|
@use_api = false if fetchers.none?(&:api_fetcher?)
|
138
136
|
end
|
139
137
|
|
140
138
|
specs.each do |name, version, platform, dependencies, metadata|
|
141
139
|
spec = if dependencies
|
142
|
-
EndpointSpecification.new(name, version, platform, dependencies, metadata)
|
140
|
+
EndpointSpecification.new(name, version, platform, self, dependencies, metadata)
|
143
141
|
else
|
144
142
|
RemoteSpecification.new(name, version, platform, self)
|
145
143
|
end
|
@@ -272,8 +270,7 @@ module Bundler
|
|
272
270
|
# cached gem specification path, if one exists
|
273
271
|
def gemspec_cached_path(spec_file_name)
|
274
272
|
paths = Bundler.rubygems.spec_cache_dirs.map {|dir| File.join(dir, spec_file_name) }
|
275
|
-
paths
|
276
|
-
paths.first
|
273
|
+
paths.find {|path| File.file? path }
|
277
274
|
end
|
278
275
|
|
279
276
|
HTTP_ERRORS = [
|
@@ -301,8 +298,6 @@ module Bundler
|
|
301
298
|
store
|
302
299
|
end
|
303
300
|
|
304
|
-
private
|
305
|
-
|
306
301
|
def remote_uri
|
307
302
|
@remote.uri
|
308
303
|
end
|
@@ -107,9 +107,9 @@ module Bundler
|
|
107
107
|
SharedHelpers.filesystem_access(File.join(base, "checksums")) {|p| FileUtils.mkdir_p(p) }
|
108
108
|
file_name = "#{File.basename(built_gem_path)}.sha512"
|
109
109
|
require "digest/sha2"
|
110
|
-
checksum = ::Digest::SHA512.
|
110
|
+
checksum = ::Digest::SHA512.file(built_gem_path).hexdigest
|
111
111
|
target = File.join(base, "checksums", file_name)
|
112
|
-
File.write(target, checksum)
|
112
|
+
File.write(target, checksum + "\n")
|
113
113
|
Bundler.ui.confirm "#{name} #{version} checksum written to checksums/#{file_name}."
|
114
114
|
end
|
115
115
|
|
@@ -90,11 +90,11 @@ module Bundler
|
|
90
90
|
MatchPlatform.platforms_match?(spec.platform, platform_object)
|
91
91
|
end
|
92
92
|
installable_candidates = same_platform_candidates.select do |spec|
|
93
|
-
|
93
|
+
spec.is_a?(StubSpecification) ||
|
94
94
|
(spec.required_ruby_version.satisfied_by?(Gem.ruby_version) &&
|
95
95
|
spec.required_rubygems_version.satisfied_by?(Gem.rubygems_version))
|
96
96
|
end
|
97
|
-
search = installable_candidates.last
|
97
|
+
search = installable_candidates.last
|
98
98
|
search.dependencies = dependencies if search && (search.is_a?(RemoteSpecification) || search.is_a?(EndpointSpecification))
|
99
99
|
search
|
100
100
|
end
|
@@ -95,7 +95,7 @@ module Bundler
|
|
95
95
|
|
96
96
|
def metadata_dependencies(platform)
|
97
97
|
spec = @specs[platform].first
|
98
|
-
return []
|
98
|
+
return [] if spec.is_a?(LazySpecification)
|
99
99
|
dependencies = []
|
100
100
|
if !spec.required_ruby_version.nil? && !spec.required_ruby_version.none?
|
101
101
|
dependencies << DepProxy.get_proxy(Gem::Dependency.new("Ruby\0", spec.required_ruby_version), platform)
|
@@ -358,24 +358,18 @@ module Bundler
|
|
358
358
|
o << "\n"
|
359
359
|
o << %(Running `bundle update` will rebuild your snapshot from scratch, using only\n)
|
360
360
|
o << %(the gems in your Gemfile, which may resolve the conflict.\n)
|
361
|
-
elsif !conflict.existing
|
361
|
+
elsif !conflict.existing && !name.end_with?("\0")
|
362
362
|
o << "\n"
|
363
363
|
|
364
364
|
relevant_source = conflict.requirement.source || source_for(name)
|
365
365
|
|
366
|
-
metadata_requirement = name.end_with?("\0")
|
367
|
-
|
368
366
|
extra_message = if conflict.requirement_trees.first.size > 1
|
369
367
|
", which is required by gem '#{SharedHelpers.pretty_dependency(conflict.requirement_trees.first[-2])}',"
|
370
368
|
else
|
371
369
|
""
|
372
370
|
end
|
373
371
|
|
374
|
-
|
375
|
-
o << "#{SharedHelpers.pretty_dependency(conflict.requirement)}#{extra_message} is not available in #{relevant_source}"
|
376
|
-
else
|
377
|
-
o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
|
378
|
-
end
|
372
|
+
o << gem_not_found_message(name, conflict.requirement, relevant_source, extra_message)
|
379
373
|
end
|
380
374
|
end,
|
381
375
|
:version_for_spec => lambda {|spec| spec.version },
|
@@ -9,46 +9,58 @@ module Bundler
|
|
9
9
|
def restart_with_locked_bundler_if_needed
|
10
10
|
return unless needs_switching? && installed?
|
11
11
|
|
12
|
-
|
12
|
+
restart_with(lockfile_version)
|
13
13
|
end
|
14
14
|
|
15
15
|
def install_locked_bundler_and_restart_with_it_if_needed
|
16
16
|
return unless needs_switching?
|
17
17
|
|
18
|
-
|
18
|
+
Bundler.ui.info \
|
19
|
+
"Bundler #{current_version} is running, but your lockfile was generated with #{lockfile_version}. " \
|
20
|
+
"Installing Bundler #{lockfile_version} and restarting using that version."
|
21
|
+
|
22
|
+
install_and_restart_with(lockfile_version)
|
23
|
+
end
|
24
|
+
|
25
|
+
def update_bundler_and_restart_with_it_if_needed(target)
|
26
|
+
return unless autoswitching_applies?
|
27
|
+
|
28
|
+
spec = resolve_update_version_from(target)
|
29
|
+
return unless spec
|
30
|
+
|
31
|
+
version = spec.version
|
32
|
+
|
33
|
+
Bundler.ui.info "Updating bundler to #{version}."
|
34
|
+
|
35
|
+
install(spec)
|
36
|
+
|
37
|
+
restart_with(version)
|
19
38
|
end
|
20
39
|
|
21
40
|
private
|
22
41
|
|
23
|
-
def
|
24
|
-
|
25
|
-
spec =
|
26
|
-
return if spec.nil?
|
42
|
+
def install_and_restart_with(version)
|
43
|
+
requirement = Gem::Requirement.new(version)
|
44
|
+
spec = find_latest_matching_spec(requirement)
|
27
45
|
|
28
|
-
|
29
|
-
|
30
|
-
|
46
|
+
if spec.nil?
|
47
|
+
Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
|
48
|
+
return
|
49
|
+
end
|
31
50
|
|
32
|
-
|
51
|
+
install(spec)
|
33
52
|
rescue StandardError => e
|
34
53
|
Bundler.ui.trace e
|
35
54
|
Bundler.ui.warn "There was an error installing the locked bundler version (#{lockfile_version}), rerun with the `--verbose` flag for more details. Going on using bundler #{current_version}."
|
36
55
|
else
|
37
|
-
|
56
|
+
restart_with(version)
|
38
57
|
end
|
39
58
|
|
40
|
-
def
|
41
|
-
source
|
42
|
-
source.remote!
|
43
|
-
source.add_dependency_names("bundler")
|
44
|
-
spec = source.specs.search(bundler_dep).first
|
45
|
-
if spec.nil?
|
46
|
-
Bundler.ui.warn "Your lockfile is locked to a version of bundler (#{lockfile_version}) that doesn't exist at https://rubygems.org/. Going on using #{current_version}"
|
47
|
-
end
|
48
|
-
spec
|
59
|
+
def install(spec)
|
60
|
+
spec.source.install(spec)
|
49
61
|
end
|
50
62
|
|
51
|
-
def
|
63
|
+
def restart_with(version)
|
52
64
|
configured_gem_home = ENV["GEM_HOME"]
|
53
65
|
configured_gem_path = ENV["GEM_PATH"]
|
54
66
|
|
@@ -57,20 +69,79 @@ module Bundler
|
|
57
69
|
|
58
70
|
Bundler.with_original_env do
|
59
71
|
Kernel.exec(
|
60
|
-
{ "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" =>
|
72
|
+
{ "GEM_HOME" => configured_gem_home, "GEM_PATH" => configured_gem_path, "BUNDLER_VERSION" => version.to_s },
|
61
73
|
*cmd
|
62
74
|
)
|
63
75
|
end
|
64
76
|
end
|
65
77
|
|
66
78
|
def needs_switching?
|
79
|
+
autoswitching_applies? &&
|
80
|
+
released?(lockfile_version) &&
|
81
|
+
!running?(lockfile_version) &&
|
82
|
+
!updating?
|
83
|
+
end
|
84
|
+
|
85
|
+
def autoswitching_applies?
|
67
86
|
ENV["BUNDLER_VERSION"].nil? &&
|
68
87
|
Bundler.rubygems.supports_bundler_trampolining? &&
|
69
88
|
SharedHelpers.in_bundle? &&
|
70
|
-
lockfile_version
|
71
|
-
|
72
|
-
|
73
|
-
|
89
|
+
lockfile_version
|
90
|
+
end
|
91
|
+
|
92
|
+
def resolve_update_version_from(target)
|
93
|
+
requirement = Gem::Requirement.new(target)
|
94
|
+
update_candidate = find_latest_matching_spec(requirement)
|
95
|
+
|
96
|
+
if update_candidate.nil?
|
97
|
+
raise InvalidOption, "The `bundle update --bundler` target version (#{target}) does not exist"
|
98
|
+
end
|
99
|
+
|
100
|
+
resolved_version = update_candidate.version
|
101
|
+
needs_update = requirement.specific? ? !running?(resolved_version) : running_older_than?(resolved_version)
|
102
|
+
|
103
|
+
return unless needs_update
|
104
|
+
|
105
|
+
update_candidate
|
106
|
+
end
|
107
|
+
|
108
|
+
def local_specs
|
109
|
+
@local_specs ||= Bundler::Source::Rubygems.new("allow_local" => true).specs.select {|spec| spec.name == "bundler" }
|
110
|
+
end
|
111
|
+
|
112
|
+
def remote_specs
|
113
|
+
@remote_specs ||= begin
|
114
|
+
source = Bundler::Source::Rubygems.new("remotes" => "https://rubygems.org")
|
115
|
+
source.remote!
|
116
|
+
source.add_dependency_names("bundler")
|
117
|
+
source.specs
|
118
|
+
end
|
119
|
+
end
|
120
|
+
|
121
|
+
def find_latest_matching_spec(requirement)
|
122
|
+
local_result = find_latest_matching_spec_from_collection(local_specs, requirement)
|
123
|
+
return local_result if local_result && requirement.specific?
|
124
|
+
|
125
|
+
remote_result = find_latest_matching_spec_from_collection(remote_specs, requirement)
|
126
|
+
return remote_result if local_result.nil?
|
127
|
+
|
128
|
+
[local_result, remote_result].max
|
129
|
+
end
|
130
|
+
|
131
|
+
def find_latest_matching_spec_from_collection(specs, requirement)
|
132
|
+
specs.sort.reverse_each.find {|spec| requirement.satisfied_by?(spec.version) }
|
133
|
+
end
|
134
|
+
|
135
|
+
def running?(version)
|
136
|
+
version == current_version
|
137
|
+
end
|
138
|
+
|
139
|
+
def running_older_than?(version)
|
140
|
+
current_version < version
|
141
|
+
end
|
142
|
+
|
143
|
+
def released?(version)
|
144
|
+
!version.to_s.end_with?(".dev")
|
74
145
|
end
|
75
146
|
|
76
147
|
def updating?
|
@@ -80,15 +151,18 @@ module Bundler
|
|
80
151
|
def installed?
|
81
152
|
Bundler.configure
|
82
153
|
|
83
|
-
Bundler.rubygems.find_bundler(lockfile_version)
|
154
|
+
Bundler.rubygems.find_bundler(lockfile_version.to_s)
|
84
155
|
end
|
85
156
|
|
86
157
|
def current_version
|
87
|
-
@current_version ||= Bundler::VERSION
|
158
|
+
@current_version ||= Gem::Version.new(Bundler::VERSION)
|
88
159
|
end
|
89
160
|
|
90
161
|
def lockfile_version
|
91
|
-
@lockfile_version
|
162
|
+
return @lockfile_version if defined?(@lockfile_version)
|
163
|
+
|
164
|
+
parsed_version = Bundler::LockfileParser.bundled_with
|
165
|
+
@lockfile_version = parsed_version ? Gem::Version.new(parsed_version) : nil
|
92
166
|
end
|
93
167
|
end
|
94
168
|
end
|
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
|
|
26
26
|
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
27
27
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
28
28
|
`git ls-files -z`.split("\x0").reject do |f|
|
29
|
-
(f == __FILE__) || f.match(%r{\A(?:(?:test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
29
|
+
(f == __FILE__) || f.match(%r{\A(?:(?:bin|test|spec|features)/|\.(?:git|travis|circleci)|appveyor)})
|
30
30
|
end
|
31
31
|
end
|
32
32
|
spec.bindir = "exe"
|
@@ -107,10 +107,7 @@ class Bundler::Thor
|
|
107
107
|
#
|
108
108
|
def replace!(regexp, string, force)
|
109
109
|
content = File.read(destination)
|
110
|
-
|
111
|
-
snippet = (behavior == :after ? after : before).to_s
|
112
|
-
|
113
|
-
if force || !snippet.include?(replacement)
|
110
|
+
if force || !content.include?(replacement)
|
114
111
|
success = content.gsub!(regexp, string)
|
115
112
|
|
116
113
|
File.open(destination, "wb") { |file| file.write(content) } unless pretend?
|
@@ -8,7 +8,12 @@ class Gem::Commands::FetchCommand < Gem::Command
|
|
8
8
|
include Gem::VersionOption
|
9
9
|
|
10
10
|
def initialize
|
11
|
-
|
11
|
+
defaults = {
|
12
|
+
:suggest_alternate => true,
|
13
|
+
:version => Gem::Requirement.default,
|
14
|
+
}
|
15
|
+
|
16
|
+
super 'fetch', 'Download a gem and place it in the current directory', defaults
|
12
17
|
|
13
18
|
add_bulk_threshold_option
|
14
19
|
add_proxy_option
|
@@ -18,6 +23,10 @@ class Gem::Commands::FetchCommand < Gem::Command
|
|
18
23
|
add_version_option
|
19
24
|
add_platform_option
|
20
25
|
add_prerelease_option
|
26
|
+
|
27
|
+
add_option '--[no-]suggestions', 'Suggest alternates when gems are not found' do |value, options|
|
28
|
+
options[:suggest_alternate] = value
|
29
|
+
end
|
21
30
|
end
|
22
31
|
|
23
32
|
def arguments # :nodoc:
|
@@ -42,15 +51,27 @@ then repackaging it.
|
|
42
51
|
"#{program_name} GEMNAME [GEMNAME ...]"
|
43
52
|
end
|
44
53
|
|
54
|
+
def check_version # :nodoc:
|
55
|
+
if options[:version] != Gem::Requirement.default and
|
56
|
+
get_all_gem_names.size > 1
|
57
|
+
alert_error "Can't use --version with multiple gems. You can specify multiple gems with" \
|
58
|
+
" version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
59
|
+
terminate_interaction 1
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
45
63
|
def execute
|
46
|
-
|
64
|
+
check_version
|
65
|
+
version = options[:version]
|
47
66
|
|
48
67
|
platform = Gem.platforms.last
|
49
|
-
gem_names =
|
68
|
+
gem_names = get_all_gem_names_and_versions
|
50
69
|
|
51
|
-
gem_names.each do |gem_name|
|
52
|
-
|
70
|
+
gem_names.each do |gem_name, gem_version|
|
71
|
+
gem_version ||= version
|
72
|
+
dep = Gem::Dependency.new gem_name, gem_version
|
53
73
|
dep.prerelease = options[:prerelease]
|
74
|
+
suppress_suggestions = !options[:suggest_alternate]
|
54
75
|
|
55
76
|
specs_and_sources, errors =
|
56
77
|
Gem::SpecFetcher.fetcher.spec_for_dependency dep
|
@@ -63,12 +84,10 @@ then repackaging it.
|
|
63
84
|
spec, source = specs_and_sources.max_by {|s,| s }
|
64
85
|
|
65
86
|
if spec.nil?
|
66
|
-
show_lookup_failure gem_name,
|
87
|
+
show_lookup_failure gem_name, gem_version, errors, suppress_suggestions, options[:domain]
|
67
88
|
next
|
68
89
|
end
|
69
|
-
|
70
90
|
source.download spec
|
71
|
-
|
72
91
|
say "Downloaded #{spec.full_name}"
|
73
92
|
end
|
74
93
|
end
|
data/lib/rubygems/package/old.rb
CHANGED
@@ -145,7 +145,7 @@ class Gem::Package::Old < Gem::Package
|
|
145
145
|
|
146
146
|
begin
|
147
147
|
@spec = Gem::Specification.from_yaml yaml
|
148
|
-
rescue
|
148
|
+
rescue Psych::SyntaxError
|
149
149
|
raise Gem::Exception, "Failed to parse gem specification out of gem file"
|
150
150
|
end
|
151
151
|
rescue ArgumentError
|
data/lib/rubygems/package.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
# This exists just to satisfy bugs in marshal'd gemspecs that
|
3
|
-
# contain a reference to
|
3
|
+
# contain a reference to Psych::PrivateType. We prune these out
|
4
4
|
# in Specification._load, but if we don't have the constant, Marshal
|
5
5
|
# blows up.
|
6
6
|
|
@@ -76,21 +76,21 @@ class Gem::Resolver::InstallerSet < Gem::Resolver::Set
|
|
76
76
|
|
77
77
|
newest = found.last
|
78
78
|
|
79
|
+
unless newest
|
80
|
+
exc = Gem::UnsatisfiableDependencyError.new request
|
81
|
+
exc.errors = errors
|
82
|
+
|
83
|
+
raise exc
|
84
|
+
end
|
85
|
+
|
79
86
|
unless @force
|
80
87
|
found_matching_metadata = found.reverse.find do |spec|
|
81
88
|
metadata_satisfied?(spec)
|
82
89
|
end
|
83
90
|
|
84
91
|
if found_matching_metadata.nil?
|
85
|
-
|
86
|
-
|
87
|
-
ensure_required_rubygems_version_met(newest.spec)
|
88
|
-
else
|
89
|
-
exc = Gem::UnsatisfiableDependencyError.new request
|
90
|
-
exc.errors = errors
|
91
|
-
|
92
|
-
raise exc
|
93
|
-
end
|
92
|
+
ensure_required_ruby_version_met(newest.spec)
|
93
|
+
ensure_required_rubygems_version_met(newest.spec)
|
94
94
|
else
|
95
95
|
newest = found_matching_metadata
|
96
96
|
end
|
data/lib/rubygems/safe_yaml.rb
CHANGED
@@ -24,33 +24,33 @@ module Gem
|
|
24
24
|
runtime
|
25
25
|
].freeze
|
26
26
|
|
27
|
-
if ::
|
27
|
+
if ::Psych.respond_to? :safe_load
|
28
28
|
def self.safe_load(input)
|
29
29
|
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
30
|
-
::
|
30
|
+
::Psych.safe_load(input, permitted_classes: PERMITTED_CLASSES, permitted_symbols: PERMITTED_SYMBOLS, aliases: true)
|
31
31
|
else
|
32
|
-
::
|
32
|
+
::Psych.safe_load(input, PERMITTED_CLASSES, PERMITTED_SYMBOLS, true)
|
33
33
|
end
|
34
34
|
end
|
35
35
|
|
36
36
|
def self.load(input)
|
37
37
|
if Gem::Version.new(Psych::VERSION) >= Gem::Version.new('3.1.0.pre1')
|
38
|
-
::
|
38
|
+
::Psych.safe_load(input, permitted_classes: [::Symbol])
|
39
39
|
else
|
40
|
-
::
|
40
|
+
::Psych.safe_load(input, [::Symbol])
|
41
41
|
end
|
42
42
|
end
|
43
43
|
else
|
44
44
|
unless Gem::Deprecate.skip
|
45
|
-
warn "
|
45
|
+
warn "Psych safe loading is not available. Please upgrade psych to a version that supports safe loading (>= 2.0)."
|
46
46
|
end
|
47
47
|
|
48
48
|
def self.safe_load(input, *args)
|
49
|
-
::
|
49
|
+
::Psych.load input
|
50
50
|
end
|
51
51
|
|
52
52
|
def self.load(input)
|
53
|
-
::
|
53
|
+
::Psych.load input
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
data/lib/rubygems/security.rb
CHANGED
@@ -261,7 +261,7 @@ require_relative 'openssl'
|
|
261
261
|
# 2. Grab the public key from the gemspec
|
262
262
|
#
|
263
263
|
# gem spec some_signed_gem-1.0.gem cert_chain | \
|
264
|
-
# ruby -
|
264
|
+
# ruby -rpsych -e 'puts Psych.load($stdin)' > public_key.crt
|
265
265
|
#
|
266
266
|
# 3. Generate a SHA1 hash of the data.tar.gz
|
267
267
|
#
|
@@ -225,7 +225,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
225
225
|
attr_reader :version
|
226
226
|
|
227
227
|
##
|
228
|
-
# A short summary of this gem's description. Displayed in
|
228
|
+
# A short summary of this gem's description. Displayed in <tt>gem list -d</tt>.
|
229
229
|
#
|
230
230
|
# The #description should be more detailed than the summary.
|
231
231
|
#
|
@@ -271,7 +271,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
271
271
|
# A list of authors for this gem.
|
272
272
|
#
|
273
273
|
# Alternatively, a single author can be specified by assigning a string to
|
274
|
-
#
|
274
|
+
# +spec.author+
|
275
275
|
#
|
276
276
|
# Usage:
|
277
277
|
#
|
@@ -1279,10 +1279,10 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1279
1279
|
raise TypeError, "invalid Gem::Specification format #{array.inspect}"
|
1280
1280
|
end
|
1281
1281
|
|
1282
|
-
# Cleanup any
|
1282
|
+
# Cleanup any Psych::PrivateType. They only show up for an old bug
|
1283
1283
|
# where nil => null, so just convert them to nil based on the type.
|
1284
1284
|
|
1285
|
-
array.map! {|e| e.kind_of?(
|
1285
|
+
array.map! {|e| e.kind_of?(Psych::PrivateType) ? nil : e }
|
1286
1286
|
|
1287
1287
|
spec.instance_variable_set :@rubygems_version, array[0]
|
1288
1288
|
# spec version
|
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.5".freeze
|
12
12
|
end
|
13
13
|
|
14
14
|
# Must be first since it unloads the prelude from 1.9.2
|
@@ -606,17 +606,10 @@ An Array (#{env.inspect}) was passed in from #{caller[3]}
|
|
606
606
|
def self.load_yaml
|
607
607
|
return if @yaml_loaded
|
608
608
|
|
609
|
-
|
610
|
-
|
611
|
-
|
612
|
-
rescue ::LoadError
|
613
|
-
# If we can't load psych, that's fine, go on.
|
614
|
-
else
|
615
|
-
require_relative 'rubygems/psych_additions'
|
616
|
-
require_relative 'rubygems/psych_tree'
|
617
|
-
end
|
609
|
+
require 'psych'
|
610
|
+
require_relative 'rubygems/psych_additions'
|
611
|
+
require_relative 'rubygems/psych_tree'
|
618
612
|
|
619
|
-
require 'yaml'
|
620
613
|
require_relative 'rubygems/safe_yaml'
|
621
614
|
|
622
615
|
@yaml_loaded = true
|
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.5"
|
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/test/rubygems/helper.rb
CHANGED
@@ -685,10 +685,10 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
685
685
|
# Load a YAML string, the psych 3 way
|
686
686
|
|
687
687
|
def load_yaml(yaml)
|
688
|
-
if
|
689
|
-
|
688
|
+
if Psych.respond_to?(:unsafe_load)
|
689
|
+
Psych.unsafe_load(yaml)
|
690
690
|
else
|
691
|
-
|
691
|
+
Psych.load(yaml)
|
692
692
|
end
|
693
693
|
end
|
694
694
|
|
@@ -696,10 +696,10 @@ class Gem::TestCase < Test::Unit::TestCase
|
|
696
696
|
# Load a YAML file, the psych 3 way
|
697
697
|
|
698
698
|
def load_yaml_file(file)
|
699
|
-
if
|
700
|
-
|
699
|
+
if Psych.respond_to?(:unsafe_load_file)
|
700
|
+
Psych.unsafe_load_file(file)
|
701
701
|
else
|
702
|
-
|
702
|
+
Psych.load_file(file)
|
703
703
|
end
|
704
704
|
end
|
705
705
|
|
@@ -157,4 +157,101 @@ class TestGemCommandsFetchCommand < Gem::TestCase
|
|
157
157
|
assert_path_exist(File.join(@tempdir, a1.file_name),
|
158
158
|
"#{a1.full_name} not fetched")
|
159
159
|
end
|
160
|
+
|
161
|
+
def test_execute_version_specified_by_colon
|
162
|
+
specs = spec_fetcher do |fetcher|
|
163
|
+
fetcher.gem 'a', 1
|
164
|
+
end
|
165
|
+
|
166
|
+
@cmd.options[:args] = %w[a:1]
|
167
|
+
|
168
|
+
use_ui @ui do
|
169
|
+
Dir.chdir @tempdir do
|
170
|
+
@cmd.execute
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
a1 = specs['a-1']
|
175
|
+
|
176
|
+
assert_path_exist(File.join(@tempdir, a1.file_name),
|
177
|
+
"#{a1.full_name} not fetched")
|
178
|
+
end
|
179
|
+
|
180
|
+
def test_execute_two_version
|
181
|
+
@cmd.options[:args] = %w[a b]
|
182
|
+
@cmd.options[:version] = Gem::Requirement.new '1'
|
183
|
+
|
184
|
+
use_ui @ui do
|
185
|
+
assert_raise Gem::MockGemUi::TermError, @ui.error do
|
186
|
+
@cmd.execute
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
msg = "ERROR: Can't use --version with multiple gems. You can specify multiple gems with" \
|
191
|
+
" version requirements using `gem fetch 'my_gem:1.0.0' 'my_other_gem:~>2.0.0'`"
|
192
|
+
|
193
|
+
assert_empty @ui.output
|
194
|
+
assert_equal msg, @ui.error.chomp
|
195
|
+
end
|
196
|
+
|
197
|
+
def test_execute_two_version_specified_by_colon
|
198
|
+
specs = spec_fetcher do |fetcher|
|
199
|
+
fetcher.gem 'a', 1
|
200
|
+
fetcher.gem 'b', 1
|
201
|
+
end
|
202
|
+
|
203
|
+
@cmd.options[:args] = %w[a:1 b:1]
|
204
|
+
|
205
|
+
use_ui @ui do
|
206
|
+
Dir.chdir @tempdir do
|
207
|
+
@cmd.execute
|
208
|
+
end
|
209
|
+
end
|
210
|
+
|
211
|
+
a1 = specs['a-1']
|
212
|
+
b1 = specs['b-1']
|
213
|
+
|
214
|
+
assert_path_exist(File.join(@tempdir, a1.file_name),
|
215
|
+
"#{a1.full_name} not fetched")
|
216
|
+
assert_path_exist(File.join(@tempdir, b1.file_name),
|
217
|
+
"#{b1.full_name} not fetched")
|
218
|
+
end
|
219
|
+
|
220
|
+
def test_execute_version_nonexistent
|
221
|
+
spec_fetcher do |fetcher|
|
222
|
+
fetcher.spec 'foo', 1
|
223
|
+
end
|
224
|
+
|
225
|
+
@cmd.options[:args] = %w[foo:2]
|
226
|
+
|
227
|
+
use_ui @ui do
|
228
|
+
@cmd.execute
|
229
|
+
end
|
230
|
+
|
231
|
+
expected = <<-EXPECTED
|
232
|
+
ERROR: Could not find a valid gem 'foo' (2) in any repository
|
233
|
+
ERROR: Possible alternatives: foo
|
234
|
+
EXPECTED
|
235
|
+
|
236
|
+
assert_equal expected, @ui.error
|
237
|
+
end
|
238
|
+
|
239
|
+
def test_execute_nonexistent_hint_disabled
|
240
|
+
spec_fetcher do |fetcher|
|
241
|
+
fetcher.spec 'foo', 1
|
242
|
+
end
|
243
|
+
|
244
|
+
@cmd.options[:args] = %w[foo:2]
|
245
|
+
@cmd.options[:suggest_alternate] = false
|
246
|
+
|
247
|
+
use_ui @ui do
|
248
|
+
@cmd.execute
|
249
|
+
end
|
250
|
+
|
251
|
+
expected = <<-EXPECTED
|
252
|
+
ERROR: Could not find a valid gem 'foo' (2) in any repository
|
253
|
+
EXPECTED
|
254
|
+
|
255
|
+
assert_equal expected, @ui.error
|
256
|
+
end
|
160
257
|
end
|
@@ -277,6 +277,22 @@ ERROR: Could not find a valid gem 'bar' (= 0.5) (required by 'foo' (>= 0)) in a
|
|
277
277
|
assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
|
278
278
|
end
|
279
279
|
|
280
|
+
def test_execute_nonexistent_force
|
281
|
+
spec_fetcher
|
282
|
+
|
283
|
+
@cmd.options[:args] = %w[nonexistent]
|
284
|
+
@cmd.options[:force] = true
|
285
|
+
|
286
|
+
use_ui @ui do
|
287
|
+
e = assert_raise Gem::MockGemUi::TermError do
|
288
|
+
@cmd.execute
|
289
|
+
end
|
290
|
+
assert_equal 2, e.exit_code
|
291
|
+
end
|
292
|
+
|
293
|
+
assert_match(/ould not find a valid gem 'nonexistent'/, @ui.error)
|
294
|
+
end
|
295
|
+
|
280
296
|
def test_execute_dependency_nonexistent
|
281
297
|
spec_fetcher do |fetcher|
|
282
298
|
fetcher.spec 'foo', 2, 'bar' => '0.5'
|
@@ -822,7 +822,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
822
822
|
}
|
823
823
|
tar.add_file 'checksums.yaml.gz', 0444 do |io|
|
824
824
|
Zlib::GzipWriter.wrap io do |gz_io|
|
825
|
-
gz_io.write
|
825
|
+
gz_io.write Psych.dump bogus_checksums
|
826
826
|
end
|
827
827
|
end
|
828
828
|
end
|
@@ -868,7 +868,7 @@ class TestGemPackage < Gem::Package::TarTestCase
|
|
868
868
|
|
869
869
|
tar.add_file 'checksums.yaml.gz', 0444 do |io|
|
870
870
|
Zlib::GzipWriter.wrap io do |gz_io|
|
871
|
-
gz_io.write
|
871
|
+
gz_io.write Psych.dump checksums
|
872
872
|
end
|
873
873
|
end
|
874
874
|
|
@@ -180,22 +180,6 @@ class TestStubSpecification < Gem::TestCase
|
|
180
180
|
assert bar.to_spec
|
181
181
|
end
|
182
182
|
|
183
|
-
def test_to_spec_activated
|
184
|
-
assert @foo.to_spec.is_a?(Gem::Specification)
|
185
|
-
assert_equal "foo", @foo.to_spec.name
|
186
|
-
refute @foo.to_spec.instance_variable_get :@ignored
|
187
|
-
end
|
188
|
-
|
189
|
-
def test_to_spec_missing_extensions
|
190
|
-
stub = stub_with_extension
|
191
|
-
|
192
|
-
capture_output do
|
193
|
-
stub.contains_requirable_file? 'nonexistent'
|
194
|
-
end
|
195
|
-
|
196
|
-
assert stub.to_spec.instance_variable_get :@ignored
|
197
|
-
end
|
198
|
-
|
199
183
|
def stub_with_version
|
200
184
|
spec = File.join @gemhome, 'specifications', 'stub_e-2.gemspec'
|
201
185
|
File.open spec, 'w' do |io|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.3.
|
4
|
+
version: 3.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -16,7 +16,7 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: bin
|
18
18
|
cert_chain: []
|
19
|
-
date:
|
19
|
+
date: 2022-01-12 00:00:00.000000000 Z
|
20
20
|
dependencies: []
|
21
21
|
description: |-
|
22
22
|
A package (also known as a library) contains a set of functionality
|
@@ -804,7 +804,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
804
804
|
- !ruby/object:Gem::Version
|
805
805
|
version: '0'
|
806
806
|
requirements: []
|
807
|
-
rubygems_version: 3.3.
|
807
|
+
rubygems_version: 3.3.5
|
808
808
|
signing_key:
|
809
809
|
specification_version: 4
|
810
810
|
summary: RubyGems is a package management framework for Ruby.
|