rubygems-update 3.2.3 → 3.2.8
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/{History.txt → CHANGELOG.md} +480 -427
- data/Manifest.txt +30 -27
- data/Rakefile +20 -28
- data/bundler/CHANGELOG.md +73 -2
- data/bundler/bundler.gemspec +1 -1
- data/bundler/lib/bundler.rb +0 -1
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/cli.rb +3 -5
- data/bundler/lib/bundler/cli/cache.rb +1 -0
- data/bundler/lib/bundler/cli/gem.rb +14 -0
- data/bundler/lib/bundler/compact_index_client/updater.rb +0 -8
- data/bundler/lib/bundler/definition.rb +17 -27
- data/bundler/lib/bundler/dep_proxy.rb +15 -8
- data/bundler/lib/bundler/feature_flag.rb +0 -1
- data/bundler/lib/bundler/fetcher.rb +0 -1
- data/bundler/lib/bundler/gem_helper.rb +9 -7
- data/bundler/lib/bundler/gem_version_promoter.rb +2 -2
- data/bundler/lib/bundler/index.rb +6 -5
- data/bundler/lib/bundler/installer.rb +0 -17
- data/bundler/lib/bundler/installer/standalone.rb +15 -0
- data/bundler/lib/bundler/lazy_specification.rb +9 -18
- data/bundler/{man → lib/bundler/man}/bundle-add.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-binstubs.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-cache.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-check.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-clean.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-config.1 +4 -4
- data/bundler/lib/bundler/man/bundle-config.1.ronn +3 -3
- data/bundler/{man → lib/bundler/man}/bundle-doctor.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-exec.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-gem.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-info.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-init.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-inject.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-install.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-list.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-lock.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-open.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-outdated.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-platform.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-pristine.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-remove.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-show.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-update.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle-viz.1 +1 -1
- data/bundler/{man → lib/bundler/man}/bundle.1 +1 -1
- data/bundler/{man → lib/bundler/man}/gemfile.5 +1 -1
- data/bundler/{man → lib/bundler/man}/index.txt +0 -0
- data/bundler/lib/bundler/resolver.rb +82 -43
- data/bundler/lib/bundler/resolver/spec_group.rb +56 -44
- data/bundler/lib/bundler/rubygems_ext.rb +16 -0
- data/bundler/lib/bundler/settings.rb +1 -1
- data/bundler/lib/bundler/shared_helpers.rb +2 -2
- data/bundler/lib/bundler/source/git.rb +19 -17
- data/bundler/lib/bundler/source/git/git_proxy.rb +54 -49
- data/bundler/lib/bundler/source/path/installer.rb +2 -0
- data/bundler/lib/bundler/source/rubygems.rb +10 -2
- data/bundler/lib/bundler/source_list.rb +2 -4
- data/bundler/lib/bundler/spec_set.rb +5 -4
- data/bundler/lib/bundler/templates/newgem/CHANGELOG.md.tt +5 -0
- data/bundler/lib/bundler/templates/newgem/Gemfile.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/newgem.gemspec.tt +1 -1
- data/bundler/lib/bundler/templates/newgem/rubocop.yml.tt +3 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph.rb +0 -1
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/errors.rb +2 -2
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
- data/bundler/lib/bundler/vendor/molinillo/lib/molinillo/resolution.rb +11 -7
- data/bundler/lib/bundler/vendor/thor/lib/thor.rb +5 -6
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/actions/file_manipulation.rb +4 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/error.rb +1 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/arguments.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/parser/options.rb +9 -8
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/basic.rb +5 -2
- data/bundler/lib/bundler/vendor/thor/lib/thor/shell/color.rb +5 -1
- data/bundler/lib/bundler/vendor/thor/lib/thor/version.rb +1 -1
- data/bundler/lib/bundler/version.rb +1 -1
- data/lib/rubygems.rb +2 -2
- data/lib/rubygems/commands/setup_command.rb +16 -62
- data/lib/rubygems/ext/builder.rb +5 -4
- data/lib/rubygems/ext/cmake_builder.rb +1 -2
- data/lib/rubygems/ext/configure_builder.rb +1 -2
- data/lib/rubygems/installer_uninstaller_utils.rb +6 -1
- data/lib/rubygems/platform.rb +0 -4
- data/lib/rubygems/remote_fetcher.rb +3 -1
- data/lib/rubygems/requirement.rb +1 -1
- data/lib/rubygems/resolver/best_set.rb +1 -1
- data/lib/rubygems/resolver/index_specification.rb +8 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/delegates/specification_provider.rb +7 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +0 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +11 -5
- data/lib/rubygems/resolver/molinillo/lib/molinillo/errors.rb +2 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/specification_provider.rb +11 -0
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +11 -7
- data/lib/rubygems/specification.rb +18 -14
- data/lib/rubygems/test_case.rb +17 -4
- data/rubygems-update.gemspec +2 -2
- data/test/rubygems/data/null-required-ruby-version.gemspec.rz +0 -0
- data/test/rubygems/data/null-required-rubygems-version.gemspec.rz +0 -0
- data/test/rubygems/test_gem.rb +5 -0
- data/test/rubygems/test_gem_commands_setup_command.rb +21 -37
- data/test/rubygems/test_gem_dependency_installer.rb +52 -47
- data/test/rubygems/test_gem_ext_builder.rb +30 -6
- data/test/rubygems/test_gem_ext_cmake_builder.rb +2 -4
- data/test/rubygems/test_gem_ext_configure_builder.rb +2 -2
- data/test/rubygems/test_gem_installer.rb +2 -0
- data/test/rubygems/test_gem_platform.rb +8 -0
- data/test/rubygems/test_gem_remote_fetcher.rb +1 -1
- data/test/rubygems/test_gem_requirement.rb +35 -1
- data/test/rubygems/test_gem_resolver_best_set.rb +23 -0
- data/test/rubygems/test_gem_specification.rb +9 -3
- data/test/rubygems/test_gem_stream_ui.rb +1 -1
- metadata +34 -55
data/lib/rubygems/ext/builder.rb
CHANGED
@@ -28,16 +28,17 @@ class Gem::Ext::Builder
|
|
28
28
|
unless make_program
|
29
29
|
make_program = (/mswin/ =~ RUBY_PLATFORM) ? 'nmake' : 'make'
|
30
30
|
end
|
31
|
+
make_program = Shellwords.split(make_program)
|
31
32
|
|
32
|
-
destdir = '
|
33
|
+
destdir = 'DESTDIR=%s' % ENV['DESTDIR']
|
33
34
|
|
34
35
|
['clean', '', 'install'].each do |target|
|
35
36
|
# Pass DESTDIR via command line to override what's in MAKEFLAGS
|
36
37
|
cmd = [
|
37
|
-
make_program,
|
38
|
+
*make_program,
|
38
39
|
destdir,
|
39
40
|
target,
|
40
|
-
].
|
41
|
+
].reject(&:empty?)
|
41
42
|
begin
|
42
43
|
run(cmd, results, "make #{target}".rstrip, make_dir)
|
43
44
|
rescue Gem::InstallError
|
@@ -56,7 +57,7 @@ class Gem::Ext::Builder
|
|
56
57
|
p(command)
|
57
58
|
end
|
58
59
|
results << "current directory: #{dir}"
|
59
|
-
results <<
|
60
|
+
results << command.shelljoin
|
60
61
|
|
61
62
|
require "open3"
|
62
63
|
# Set $SOURCE_DATE_EPOCH for the subprocess.
|
@@ -4,8 +4,7 @@ require_relative '../command'
|
|
4
4
|
class Gem::Ext::CmakeBuilder < Gem::Ext::Builder
|
5
5
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, cmake_dir=Dir.pwd)
|
6
6
|
unless File.exist?(File.join(cmake_dir, 'Makefile'))
|
7
|
-
cmd = "cmake . -DCMAKE_INSTALL_PREFIX=#{dest_path}"
|
8
|
-
cmd << " #{Gem::Command.build_args.join ' '}" unless Gem::Command.build_args.empty?
|
7
|
+
cmd = ["cmake", ".", "-DCMAKE_INSTALL_PREFIX=#{dest_path}", *Gem::Command.build_args]
|
9
8
|
|
10
9
|
run cmd, results, class_name, cmake_dir
|
11
10
|
end
|
@@ -8,8 +8,7 @@
|
|
8
8
|
class Gem::Ext::ConfigureBuilder < Gem::Ext::Builder
|
9
9
|
def self.build(extension, dest_path, results, args=[], lib_dir=nil, configure_dir=Dir.pwd)
|
10
10
|
unless File.exist?(File.join(configure_dir, 'Makefile'))
|
11
|
-
cmd = "sh ./configure --prefix=#{dest_path}"
|
12
|
-
cmd << " #{args.join ' '}" unless args.empty?
|
11
|
+
cmd = ["sh", "./configure", "--prefix=#{dest_path}", *args]
|
13
12
|
|
14
13
|
run cmd, results, class_name, configure_dir
|
15
14
|
end
|
@@ -6,11 +6,16 @@
|
|
6
6
|
module Gem::InstallerUninstallerUtils
|
7
7
|
|
8
8
|
def regenerate_plugins_for(spec, plugins_dir)
|
9
|
+
plugins = spec.plugins
|
10
|
+
return if plugins.empty?
|
11
|
+
|
12
|
+
require 'pathname'
|
13
|
+
|
9
14
|
spec.plugins.each do |plugin|
|
10
15
|
plugin_script_path = File.join plugins_dir, "#{spec.name}_plugin#{File.extname(plugin)}"
|
11
16
|
|
12
17
|
File.open plugin_script_path, 'wb' do |file|
|
13
|
-
file.puts "
|
18
|
+
file.puts "require_relative '#{Pathname.new(plugin).relative_path_from(Pathname.new(plugins_dir))}'"
|
14
19
|
end
|
15
20
|
|
16
21
|
verbose plugin_script_path
|
data/lib/rubygems/platform.rb
CHANGED
@@ -26,13 +26,15 @@ class Gem::RemoteFetcher
|
|
26
26
|
##
|
27
27
|
# The URI which was being accessed when the exception happened.
|
28
28
|
|
29
|
-
attr_accessor :uri
|
29
|
+
attr_accessor :uri, :original_uri
|
30
30
|
|
31
31
|
def initialize(message, uri)
|
32
32
|
super message
|
33
33
|
|
34
34
|
uri = parse_uri(uri)
|
35
35
|
|
36
|
+
@original_uri = uri.dup
|
37
|
+
|
36
38
|
uri.password = 'REDACTED' if uri.respond_to?(:password) && uri.password
|
37
39
|
|
38
40
|
@uri = uri.to_s
|
data/lib/rubygems/requirement.rb
CHANGED
@@ -58,7 +58,7 @@ class Gem::Resolver::BestSet < Gem::Resolver::ComposedSet
|
|
58
58
|
# The calling method must retry the exception to repeat the lookup.
|
59
59
|
|
60
60
|
def replace_failed_api_set(error) # :nodoc:
|
61
|
-
uri = error.
|
61
|
+
uri = error.original_uri
|
62
62
|
uri = URI uri unless URI === uri
|
63
63
|
uri = uri + "."
|
64
64
|
|
@@ -35,17 +35,23 @@ class Gem::Resolver::IndexSpecification < Gem::Resolver::Specification
|
|
35
35
|
|
36
36
|
##
|
37
37
|
# The required_ruby_version constraint for this specification
|
38
|
+
#
|
39
|
+
# A fallback is included because when generated, some marshalled specs have it
|
40
|
+
# set to +nil+.
|
38
41
|
|
39
42
|
def required_ruby_version
|
40
|
-
spec.required_ruby_version
|
43
|
+
spec.required_ruby_version || Gem::Requirement.default
|
41
44
|
end
|
42
45
|
|
43
46
|
##
|
44
47
|
# The required_rubygems_version constraint for this specification
|
45
48
|
#
|
49
|
+
# A fallback is included because the original version of the specification
|
50
|
+
# API didn't include that field, so some marshalled specs in the index have it
|
51
|
+
# set to +nil+.
|
46
52
|
|
47
53
|
def required_rubygems_version
|
48
|
-
spec.required_rubygems_version
|
54
|
+
spec.required_rubygems_version || Gem::Requirement.default
|
49
55
|
end
|
50
56
|
|
51
57
|
def ==(other)
|
@@ -26,6 +26,13 @@ module Gem::Resolver::Molinillo
|
|
26
26
|
end
|
27
27
|
end
|
28
28
|
|
29
|
+
# (see Gem::Resolver::Molinillo::SpecificationProvider#dependencies_equal?)
|
30
|
+
def dependencies_equal?(dependencies, other_dependencies)
|
31
|
+
with_no_such_dependency_error_handling do
|
32
|
+
specification_provider.dependencies_equal?(dependencies, other_dependencies)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
29
36
|
# (see Gem::Resolver::Molinillo::SpecificationProvider#name_for)
|
30
37
|
def name_for(dependency)
|
31
38
|
with_no_such_dependency_error_handling do
|
@@ -59,7 +59,7 @@ module Gem::Resolver::Molinillo
|
|
59
59
|
# @param [Set<Vertex>] vertices the set to add the predecessors to
|
60
60
|
# @return [Set<Vertex>] the vertices of {#graph} where `self` is a
|
61
61
|
# {#descendent?}
|
62
|
-
def _recursive_predecessors(vertices =
|
62
|
+
def _recursive_predecessors(vertices = new_vertex_set)
|
63
63
|
incoming_edges.each do |edge|
|
64
64
|
vertex = edge.origin
|
65
65
|
next unless vertices.add?(vertex)
|
@@ -85,7 +85,7 @@ module Gem::Resolver::Molinillo
|
|
85
85
|
# @param [Set<Vertex>] vertices the set to add the successors to
|
86
86
|
# @return [Set<Vertex>] the vertices of {#graph} where `self` is an
|
87
87
|
# {#ancestor?}
|
88
|
-
def _recursive_successors(vertices =
|
88
|
+
def _recursive_successors(vertices = new_vertex_set)
|
89
89
|
outgoing_edges.each do |edge|
|
90
90
|
vertex = edge.destination
|
91
91
|
next unless vertices.add?(vertex)
|
@@ -128,7 +128,7 @@ module Gem::Resolver::Molinillo
|
|
128
128
|
|
129
129
|
# Is there a path from `self` to `other` following edges in the
|
130
130
|
# dependency graph?
|
131
|
-
# @return
|
131
|
+
# @return whether there is a path following edges within this {#graph}
|
132
132
|
def path_to?(other)
|
133
133
|
_path_to?(other)
|
134
134
|
end
|
@@ -138,7 +138,7 @@ module Gem::Resolver::Molinillo
|
|
138
138
|
# @param [Vertex] other the vertex to check if there's a path to
|
139
139
|
# @param [Set<Vertex>] visited the vertices of {#graph} that have been visited
|
140
140
|
# @return [Boolean] whether there is a path to `other` from `self`
|
141
|
-
def _path_to?(other, visited =
|
141
|
+
def _path_to?(other, visited = new_vertex_set)
|
142
142
|
return false unless visited.add?(self)
|
143
143
|
return true if equal?(other)
|
144
144
|
successors.any? { |v| v._path_to?(other, visited) }
|
@@ -147,12 +147,18 @@ module Gem::Resolver::Molinillo
|
|
147
147
|
|
148
148
|
# Is there a path from `other` to `self` following edges in the
|
149
149
|
# dependency graph?
|
150
|
-
# @return
|
150
|
+
# @return whether there is a path following edges within this {#graph}
|
151
151
|
def ancestor?(other)
|
152
152
|
other.path_to?(self)
|
153
153
|
end
|
154
154
|
|
155
155
|
alias is_reachable_from? ancestor?
|
156
|
+
|
157
|
+
def new_vertex_set
|
158
|
+
require 'set'
|
159
|
+
Set.new
|
160
|
+
end
|
161
|
+
private :new_vertex_set
|
156
162
|
end
|
157
163
|
end
|
158
164
|
end
|
@@ -34,7 +34,7 @@ module Gem::Resolver::Molinillo
|
|
34
34
|
|
35
35
|
# An error caused by attempting to fulfil a dependency that was circular
|
36
36
|
#
|
37
|
-
# @note This exception will be thrown
|
37
|
+
# @note This exception will be thrown if and only if a {Vertex} is added to a
|
38
38
|
# {DependencyGraph} that has a {DependencyGraph::Vertex#path_to?} an
|
39
39
|
# existing {DependencyGraph::Vertex}
|
40
40
|
class CircularDependencyError < ResolverError
|
@@ -121,7 +121,7 @@ module Gem::Resolver::Molinillo
|
|
121
121
|
t = ''.dup
|
122
122
|
depth = 2
|
123
123
|
tree.each do |req|
|
124
|
-
t << ' ' * depth << req
|
124
|
+
t << ' ' * depth << printable_requirement.call(req)
|
125
125
|
unless tree.last == req
|
126
126
|
if spec = conflict.activated_by_name[name_for(req)]
|
127
127
|
t << %( was resolved to #{version_for_spec.call(spec)}, which)
|
@@ -45,6 +45,17 @@ module Gem::Resolver::Molinillo
|
|
45
45
|
true
|
46
46
|
end
|
47
47
|
|
48
|
+
# Determines whether two arrays of dependencies are equal, and thus can be
|
49
|
+
# grouped.
|
50
|
+
#
|
51
|
+
# @param [Array<Object>] dependencies
|
52
|
+
# @param [Array<Object>] other_dependencies
|
53
|
+
# @return [Boolean] whether `dependencies` and `other_dependencies` should
|
54
|
+
# be considered equal.
|
55
|
+
def dependencies_equal?(dependencies, other_dependencies)
|
56
|
+
dependencies == other_dependencies
|
57
|
+
end
|
58
|
+
|
48
59
|
# Returns the name for the given `dependency`.
|
49
60
|
# @note This method should be 'pure', i.e. the return value should depend
|
50
61
|
# only on the `dependency` parameter.
|
@@ -329,11 +329,11 @@ module Gem::Resolver::Molinillo
|
|
329
329
|
|
330
330
|
# Look for past conflicts that could be unwound to affect the
|
331
331
|
# requirement tree for the current conflict
|
332
|
+
all_reqs = last_detail_for_current_unwind.all_requirements
|
333
|
+
all_reqs_size = all_reqs.size
|
332
334
|
relevant_unused_unwinds = unused_unwind_options.select do |alternative|
|
333
|
-
|
334
|
-
|
335
|
-
alternative.requirements_unwound_to_instead
|
336
|
-
next if intersecting_requirements.empty?
|
335
|
+
diff_reqs = all_reqs - alternative.requirements_unwound_to_instead
|
336
|
+
next if diff_reqs.size == all_reqs_size
|
337
337
|
# Find the highest index unwind whilst looping through
|
338
338
|
current_detail = alternative if alternative > current_detail
|
339
339
|
alternative
|
@@ -344,8 +344,12 @@ module Gem::Resolver::Molinillo
|
|
344
344
|
state.unused_unwind_options += unwind_details.reject { |detail| detail.state_index == -1 }
|
345
345
|
|
346
346
|
# Update the requirements_unwound_to_instead on any relevant unused unwinds
|
347
|
-
relevant_unused_unwinds.each
|
348
|
-
|
347
|
+
relevant_unused_unwinds.each do |d|
|
348
|
+
(d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
|
349
|
+
end
|
350
|
+
unwind_details.each do |d|
|
351
|
+
(d.requirements_unwound_to_instead << current_detail.state_requirement).uniq!
|
352
|
+
end
|
349
353
|
|
350
354
|
current_detail
|
351
355
|
end
|
@@ -803,7 +807,7 @@ module Gem::Resolver::Molinillo
|
|
803
807
|
|
804
808
|
possibilities.reverse_each do |possibility|
|
805
809
|
dependencies = dependencies_for(possibility)
|
806
|
-
if current_possibility_set && current_possibility_set.dependencies
|
810
|
+
if current_possibility_set && dependencies_equal?(current_possibility_set.dependencies, dependencies)
|
807
811
|
current_possibility_set.possibilities.unshift(possibility)
|
808
812
|
else
|
809
813
|
possibility_sets.unshift(PossibilitySet.new(dependencies, [possibility]))
|
@@ -182,6 +182,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
182
182
|
@@default_value[k].nil?
|
183
183
|
end
|
184
184
|
|
185
|
+
@@stubs = nil
|
185
186
|
@@stubs_by_name = {}
|
186
187
|
|
187
188
|
# Sentinel object to represent "not found" stubs
|
@@ -800,10 +801,8 @@ class Gem::Specification < Gem::BasicSpecification
|
|
800
801
|
def self.stubs
|
801
802
|
@@stubs ||= begin
|
802
803
|
pattern = "*.gemspec"
|
803
|
-
stubs =
|
804
|
-
stubs = stubs.uniq {|stub| stub.full_name }
|
804
|
+
stubs = stubs_for_pattern(pattern, false)
|
805
805
|
|
806
|
-
_resort!(stubs)
|
807
806
|
@@stubs_by_name = stubs.select {|s| Gem::Platform.match_spec? s }.group_by(&:name)
|
808
807
|
stubs
|
809
808
|
end
|
@@ -820,26 +819,31 @@ class Gem::Specification < Gem::BasicSpecification
|
|
820
819
|
end
|
821
820
|
end
|
822
821
|
|
823
|
-
EMPTY = [].freeze # :nodoc:
|
824
|
-
|
825
822
|
##
|
826
823
|
# Returns a Gem::StubSpecification for installed gem named +name+
|
827
824
|
# only returns stubs that match Gem.platforms
|
828
825
|
|
829
826
|
def self.stubs_for(name)
|
830
|
-
if @@
|
831
|
-
@@stubs_by_name[name]
|
827
|
+
if @@stubs
|
828
|
+
@@stubs_by_name[name] || []
|
832
829
|
else
|
833
|
-
|
834
|
-
stubs = installed_stubs(dirs, pattern).select {|s| Gem::Platform.match_spec? s } + default_stubs(pattern)
|
835
|
-
stubs = stubs.uniq {|stub| stub.full_name }.group_by(&:name)
|
836
|
-
stubs.each_value {|v| _resort!(v) }
|
837
|
-
|
838
|
-
@@stubs_by_name.merge! stubs
|
839
|
-
@@stubs_by_name[name] ||= EMPTY
|
830
|
+
@@stubs_by_name[name] ||= stubs_for_pattern("#{name}-*.gemspec")
|
840
831
|
end
|
841
832
|
end
|
842
833
|
|
834
|
+
##
|
835
|
+
# Finds stub specifications matching a pattern from the standard locations,
|
836
|
+
# optionally filtering out specs not matching the current platform
|
837
|
+
#
|
838
|
+
def self.stubs_for_pattern(pattern, match_platform = true) # :nodoc:
|
839
|
+
installed_stubs = installed_stubs(Gem::Specification.dirs, pattern)
|
840
|
+
installed_stubs.select! {|s| Gem::Platform.match_spec? s } if match_platform
|
841
|
+
stubs = installed_stubs + default_stubs(pattern)
|
842
|
+
stubs = stubs.uniq {|stub| stub.full_name }
|
843
|
+
_resort!(stubs)
|
844
|
+
stubs
|
845
|
+
end
|
846
|
+
|
843
847
|
def self._resort!(specs) # :nodoc:
|
844
848
|
specs.sort! do |a, b|
|
845
849
|
names = a.name <=> b.name
|
data/lib/rubygems/test_case.rb
CHANGED
@@ -26,7 +26,20 @@ begin
|
|
26
26
|
rescue LoadError
|
27
27
|
end
|
28
28
|
|
29
|
-
|
29
|
+
if File.exist?(bundler_gemspec)
|
30
|
+
require_relative '../../bundler/lib/bundler'
|
31
|
+
else
|
32
|
+
require 'bundler'
|
33
|
+
end
|
34
|
+
|
35
|
+
# Enable server plugin needed for bisection
|
36
|
+
if ENV["RG_BISECT_SERVER_PLUGIN"]
|
37
|
+
require ENV["RG_BISECT_SERVER_PLUGIN"]
|
38
|
+
|
39
|
+
Minitest.extensions << "server"
|
40
|
+
end
|
41
|
+
|
42
|
+
ENV["MT_NO_PLUGINS"] = "true"
|
30
43
|
|
31
44
|
require 'minitest/autorun'
|
32
45
|
|
@@ -250,16 +263,16 @@ class Gem::TestCase < Minitest::Test
|
|
250
263
|
def assert_contains_make_command(target, output, msg = nil)
|
251
264
|
if output.match(/\n/)
|
252
265
|
msg = message(msg) do
|
253
|
-
|
266
|
+
"Expected output containing make command \"%s\", but was \n\nBEGIN_OF_OUTPUT\n%sEND_OF_OUTPUT" % [
|
254
267
|
('%s %s' % [make_command, target]).rstrip,
|
255
|
-
output
|
268
|
+
output,
|
256
269
|
]
|
257
270
|
end
|
258
271
|
else
|
259
272
|
msg = message(msg) do
|
260
273
|
'Expected make command "%s": %s' % [
|
261
274
|
('%s %s' % [make_command, target]).rstrip,
|
262
|
-
output
|
275
|
+
output,
|
263
276
|
]
|
264
277
|
end
|
265
278
|
end
|
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.2.
|
5
|
+
s.version = "3.2.8"
|
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
|
|
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.require_paths = ["hide_lib_for_update"]
|
22
22
|
s.rdoc_options = ["--main", "README.md", "--title=RubyGems Update Documentation"]
|
23
23
|
s.extra_rdoc_files = [
|
24
|
-
"
|
24
|
+
"CHANGELOG.md", "LICENSE.txt", "MAINTAINERS.txt",
|
25
25
|
"MIT.txt", "Manifest.txt", "README.md",
|
26
26
|
"UPGRADING.md", "POLICIES.md", "CODE_OF_CONDUCT.md",
|
27
27
|
"CONTRIBUTING.md", "bundler/CHANGELOG.md",
|
Binary file
|
Binary file
|
data/test/rubygems/test_gem.rb
CHANGED
@@ -692,6 +692,11 @@ class TestGem < Gem::TestCase
|
|
692
692
|
ensure
|
693
693
|
FileUtils.chmod 0600, parent
|
694
694
|
end
|
695
|
+
|
696
|
+
def test_self_ensure_gem_directories_non_existent_paths
|
697
|
+
Gem.ensure_gem_subdirectories '/proc/0123456789/bogus' # should not raise
|
698
|
+
Gem.ensure_gem_subdirectories 'classpath:/bogus/x' # JRuby embed scenario
|
699
|
+
end
|
695
700
|
end
|
696
701
|
|
697
702
|
def test_self_extension_dir_shared
|