rubygems-update 2.6.10 → 2.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/CONTRIBUTING.rdoc +1 -1
- data/History.txt +23 -10
- data/POLICIES.rdoc +1 -1
- data/lib/rubygems.rb +1 -1
- data/lib/rubygems/request_set/lockfile/tokenizer.rb +1 -1
- data/lib/rubygems/resolver.rb +38 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph.rb +13 -3
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/add_edge_no_circular.rb +9 -2
- data/lib/rubygems/resolver/molinillo/lib/molinillo/dependency_graph/vertex.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/modules/ui.rb +1 -1
- data/lib/rubygems/resolver/molinillo/lib/molinillo/resolution.rb +35 -15
- data/lib/rubygems/resolver/set.rb +1 -1
- data/lib/rubygems/test_case.rb +1 -1
- data/test/rubygems/test_gem.rb +40 -23
- data/test/rubygems/test_gem_resolver.rb +3 -3
- data/util/patch_with_prs.rb +1 -0
- metadata +3 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: a3145b3347290a8137e8aafa35a0c28e7a2df9cf50129a35f8e99c4e37dfbad9
|
|
4
|
+
data.tar.gz: e9c34d66185f10c358e6bfb47d1a55828f3433d16eb1c1dddb127c36fcab297d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9e27f2aa64535ebc313e5ede961eccb6b671ee65d42730ab84b200df57a3f819ef5f379d9c5041ee80d6127d8fad2a03c9661ecf1042fe712f9767178d883e43
|
|
7
|
+
data.tar.gz: 19aeb548def6a0b6a274e5281f1b840a8de35d026c31ff4d9bb1f827808b58758f6a1fe9d72688a8c02043cecae13912c5894832a27889ebbe0f8974190c1208
|
data/CONTRIBUTING.rdoc
CHANGED
|
@@ -54,7 +54,7 @@ type of the issue or pull request.
|
|
|
54
54
|
* <b>cleanup</b> - Generally for a pull request that improves the code base without
|
|
55
55
|
fixing a bug or implementing a feature.
|
|
56
56
|
* <b>major bump</b> - This issue or pull request requires a major version bump
|
|
57
|
-
* <b>administrative</b> - This issue relates to
|
|
57
|
+
* <b>administrative</b> - This issue relates to administrative tasks that need to
|
|
58
58
|
take place as it relates to rubygems
|
|
59
59
|
|
|
60
60
|
Bug report and Bugfix have the same color. And feature implementation and
|
data/History.txt
CHANGED
|
@@ -1,5 +1,18 @@
|
|
|
1
1
|
# coding: UTF-8
|
|
2
2
|
|
|
3
|
+
=== 2.6.11 / 2017-03-16
|
|
4
|
+
|
|
5
|
+
Bug fixes:
|
|
6
|
+
|
|
7
|
+
* Fixed broken tests on ruby-head. Pull request #1841 by
|
|
8
|
+
SHIBATA Hiroshi.
|
|
9
|
+
* Update vendored Molinillo to 0.5.7. Pull request #1859 by Samuel
|
|
10
|
+
Giddins.
|
|
11
|
+
* Avoid activating Ruby 2.5 default gems when possible. Pull request #1843
|
|
12
|
+
by Samuel Giddins.
|
|
13
|
+
* Use improved resolver sorting algorithm. Pull request #1856 by
|
|
14
|
+
Samuel Giddins.
|
|
15
|
+
|
|
3
16
|
=== 2.6.10 / 2017-01-23
|
|
4
17
|
|
|
5
18
|
Bug fixes:
|
|
@@ -2370,7 +2383,7 @@ http://rubygems.org is now the default source for downloading gems.
|
|
|
2370
2383
|
You may have sources set via ~/.gemrc, so you should replace
|
|
2371
2384
|
http://gems.rubyforge.org with http://rubygems.org
|
|
2372
2385
|
|
|
2373
|
-
http://gems.rubyforge.org will continue to work for the
|
|
2386
|
+
http://gems.rubyforge.org will continue to work for the foreseeable future.
|
|
2374
2387
|
|
|
2375
2388
|
New features:
|
|
2376
2389
|
|
|
@@ -2415,12 +2428,12 @@ New features:
|
|
|
2415
2428
|
* `gem server` now supports --bind. Patch #27357 by Bruno Michel.
|
|
2416
2429
|
* `gem rdoc` no longer overwrites built documentation. Use --overwrite
|
|
2417
2430
|
force rebuilding. Patch #25982 by Akinori MUSHA.
|
|
2418
|
-
*
|
|
2431
|
+
* Capital letters are now allowed in prerelease versions.
|
|
2419
2432
|
|
|
2420
2433
|
Bug fixes:
|
|
2421
2434
|
|
|
2422
2435
|
* Development deps are no longer added to rubygems-update gem so older
|
|
2423
|
-
versions can update
|
|
2436
|
+
versions can update successfully.
|
|
2424
2437
|
* Installer bugs:
|
|
2425
2438
|
* Prerelease gems can now depend on non-prerelease gems.
|
|
2426
2439
|
* Development dependencies are ignored unless explicitly needed. Bug #27608
|
|
@@ -2840,7 +2853,7 @@ Major New Features Include:
|
|
|
2840
2853
|
* Bulk update threshold can be specified (-B, --bulk-threshold)
|
|
2841
2854
|
* New `gem fetch` command
|
|
2842
2855
|
* `gem` now has "really verbose" output when you specify -v
|
|
2843
|
-
* Improved stubs and `gem.bat` on mswin, including better
|
|
2856
|
+
* Improved stubs and `gem.bat` on mswin, including better compatibility
|
|
2844
2857
|
with the One-Click Installer.
|
|
2845
2858
|
|
|
2846
2859
|
Other Changes Include:
|
|
@@ -2903,7 +2916,7 @@ Bug Fixes Include:
|
|
|
2903
2916
|
* The source cache files may now be dropped with the "gem sources
|
|
2904
2917
|
--clear-all" command. (This command may require root is the system
|
|
2905
2918
|
source cache is in a root protected area).
|
|
2906
|
-
* Several sub-commands were
|
|
2919
|
+
* Several sub-commands were accidentally dropped from the "gem" command.
|
|
2907
2920
|
These commands have been restored.
|
|
2908
2921
|
|
|
2909
2922
|
=== 0.9.3 / 2007-05-10
|
|
@@ -2913,7 +2926,7 @@ Bug Fixes Include:
|
|
|
2913
2926
|
The ZLib library on Windows will occasionally complains about a buffer error
|
|
2914
2927
|
when unpacking gems. The Gems software has a workaround for that problem, but
|
|
2915
2928
|
the workaround was only enabled for versions of ZLib 1.2.1 or earlier. We
|
|
2916
|
-
have received several reports of the error
|
|
2929
|
+
have received several reports of the error occurring with ZLib 1.2.3, so we
|
|
2917
2930
|
have permanently enabled the work around on all versions.
|
|
2918
2931
|
|
|
2919
2932
|
=== 0.9.2 / 2007-02-05
|
|
@@ -2954,7 +2967,7 @@ Major Enhancments include:
|
|
|
2954
2967
|
|
|
2955
2968
|
Minor enhancements include:
|
|
2956
2969
|
|
|
2957
|
-
*
|
|
2970
|
+
* Version 0.0.0 is now a valid gem version.
|
|
2958
2971
|
* Better detection of missing SSL functionality.
|
|
2959
2972
|
* SSL is not required if the security policy does not require
|
|
2960
2973
|
signature checking.
|
|
@@ -2973,7 +2986,7 @@ Bug Fixes:
|
|
|
2973
2986
|
* Fixed bug where the wrong executables could be uninstalled (Eric
|
|
2974
2987
|
Hodel).
|
|
2975
2988
|
* Fixed bug where gem unpack occasionally unpacked the wrong gem.
|
|
2976
|
-
* Fixed bug where a fatal error
|
|
2989
|
+
* Fixed bug where a fatal error occurred when permissions on .gemrc
|
|
2977
2990
|
were too restrictive (reported by Luca Pireddu).
|
|
2978
2991
|
* Fixed prefix handling for native expressions (patch by Aaron Patterson).
|
|
2979
2992
|
* Fixed several Upgrade => Update typos.
|
|
@@ -2999,7 +3012,7 @@ Bug Fixes:
|
|
|
2999
3012
|
|
|
3000
3013
|
=== 0.8.10 / 2005-03-27
|
|
3001
3014
|
|
|
3002
|
-
* In multi-user environments, it is common to supply
|
|
3015
|
+
* In multi-user environments, it is common to supply multiple versions of gems
|
|
3003
3016
|
(for example Rails), allowing individual users to select the version of the
|
|
3004
3017
|
gem they desire. This allows a user to be insulated from updates to that
|
|
3005
3018
|
gem. RubyGems 0.8.10 fixes a problem where gems could occasionally become
|
|
@@ -3221,7 +3234,7 @@ See ChangeLog
|
|
|
3221
3234
|
|
|
3222
3235
|
=== 0.4.0 / 2004-05-30
|
|
3223
3236
|
|
|
3224
|
-
* Minor bug fixes including Windows
|
|
3237
|
+
* Minor bug fixes including Windows compatibility issues
|
|
3225
3238
|
|
|
3226
3239
|
=== 0.3.0 / 2004-04-30
|
|
3227
3240
|
|
data/POLICIES.rdoc
CHANGED
|
@@ -32,7 +32,7 @@ receive any updates.
|
|
|
32
32
|
Security releases will be made for RubyGems version series that were included
|
|
33
33
|
in a Ruby release.
|
|
34
34
|
|
|
35
|
-
For example, RubyGems 2.0.x will
|
|
35
|
+
For example, RubyGems 2.0.x will receive security fixes until Ruby 2.0.0
|
|
36
36
|
reaches end-of-life.
|
|
37
37
|
|
|
38
38
|
== Release Policies
|
data/lib/rubygems.rb
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
|
-
require 'strscan'
|
|
3
2
|
require 'rubygems/request_set/lockfile/parser'
|
|
4
3
|
|
|
5
4
|
class Gem::RequestSet::Lockfile::Tokenizer
|
|
@@ -58,6 +57,7 @@ class Gem::RequestSet::Lockfile::Tokenizer
|
|
|
58
57
|
private
|
|
59
58
|
|
|
60
59
|
def tokenize input
|
|
60
|
+
require 'strscan'
|
|
61
61
|
s = StringScanner.new input
|
|
62
62
|
|
|
63
63
|
until s.eos? do
|
data/lib/rubygems/resolver.rb
CHANGED
|
@@ -4,9 +4,6 @@ require 'rubygems/exceptions'
|
|
|
4
4
|
require 'rubygems/util'
|
|
5
5
|
require 'rubygems/util/list'
|
|
6
6
|
|
|
7
|
-
require 'uri'
|
|
8
|
-
require 'net/http'
|
|
9
|
-
|
|
10
7
|
##
|
|
11
8
|
# Given a set of Gem::Dependency objects as +needed+ and a way to query the
|
|
12
9
|
# set of available specs via +set+, calculates a set of ActivationRequest
|
|
@@ -256,6 +253,44 @@ class Gem::Resolver
|
|
|
256
253
|
@soft_missing
|
|
257
254
|
end
|
|
258
255
|
|
|
256
|
+
def sort_dependencies(dependencies, activated, conflicts)
|
|
257
|
+
dependencies.sort_by do |dependency|
|
|
258
|
+
name = name_for(dependency)
|
|
259
|
+
[
|
|
260
|
+
activated.vertex_named(name).payload ? 0 : 1,
|
|
261
|
+
amount_constrained(dependency),
|
|
262
|
+
conflicts[name] ? 0 : 1,
|
|
263
|
+
activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
|
|
264
|
+
]
|
|
265
|
+
end
|
|
266
|
+
end
|
|
267
|
+
|
|
268
|
+
SINGLE_POSSIBILITY_CONSTRAINT_PENALTY = 1_000_000
|
|
269
|
+
private_constant :SINGLE_POSSIBILITY_CONSTRAINT_PENALTY if defined?(private_constant)
|
|
270
|
+
|
|
271
|
+
# returns an integer \in (-\infty, 0]
|
|
272
|
+
# a number closer to 0 means the dependency is less constraining
|
|
273
|
+
#
|
|
274
|
+
# dependencies w/ 0 or 1 possibilities (ignoring version requirements)
|
|
275
|
+
# are given very negative values, so they _always_ sort first,
|
|
276
|
+
# before dependencies that are unconstrained
|
|
277
|
+
def amount_constrained(dependency)
|
|
278
|
+
@amount_constrained ||= {}
|
|
279
|
+
@amount_constrained[dependency.name] ||= begin
|
|
280
|
+
name_dependency = Gem::Dependency.new(dependency.name)
|
|
281
|
+
dependency_request_for_name = Gem::Resolver::DependencyRequest.new(name_dependency, dependency.requester)
|
|
282
|
+
all = @set.find_all(dependency_request_for_name).size
|
|
283
|
+
|
|
284
|
+
if all <= 1
|
|
285
|
+
all - SINGLE_POSSIBILITY_CONSTRAINT_PENALTY
|
|
286
|
+
else
|
|
287
|
+
search = search_for(dependency).size
|
|
288
|
+
search - all
|
|
289
|
+
end
|
|
290
|
+
end
|
|
291
|
+
end
|
|
292
|
+
private :amount_constrained
|
|
293
|
+
|
|
259
294
|
end
|
|
260
295
|
|
|
261
296
|
##
|
|
@@ -98,18 +98,27 @@ module Gem::Resolver::Molinillo
|
|
|
98
98
|
"#{self.class}:#{vertices.values.inspect}"
|
|
99
99
|
end
|
|
100
100
|
|
|
101
|
+
# @param [Hash] options options for dot output.
|
|
101
102
|
# @return [String] Returns a dot format representation of the graph
|
|
102
|
-
def to_dot
|
|
103
|
+
def to_dot(options = {})
|
|
104
|
+
edge_label = options.delete(:edge_label)
|
|
105
|
+
raise ArgumentError, "Unknown options: #{options.keys}" unless options.empty?
|
|
106
|
+
|
|
103
107
|
dot_vertices = []
|
|
104
108
|
dot_edges = []
|
|
105
109
|
vertices.each do |n, v|
|
|
106
110
|
dot_vertices << " #{n} [label=\"{#{n}|#{v.payload}}\"]"
|
|
107
111
|
v.outgoing_edges.each do |e|
|
|
108
|
-
|
|
112
|
+
label = edge_label ? edge_label.call(e) : e.requirement
|
|
113
|
+
dot_edges << " #{e.origin.name} -> #{e.destination.name} [label=#{label.to_s.dump}]"
|
|
109
114
|
end
|
|
110
115
|
end
|
|
116
|
+
|
|
117
|
+
dot_vertices.uniq!
|
|
111
118
|
dot_vertices.sort!
|
|
119
|
+
dot_edges.uniq!
|
|
112
120
|
dot_edges.sort!
|
|
121
|
+
|
|
113
122
|
dot = dot_vertices.unshift('digraph G {').push('') + dot_edges.push('}')
|
|
114
123
|
dot.join("\n")
|
|
115
124
|
end
|
|
@@ -123,7 +132,8 @@ module Gem::Resolver::Molinillo
|
|
|
123
132
|
vertices.each do |name, vertex|
|
|
124
133
|
other_vertex = other.vertex_named(name)
|
|
125
134
|
return false unless other_vertex
|
|
126
|
-
return false unless
|
|
135
|
+
return false unless vertex.payload == other_vertex.payload
|
|
136
|
+
return false unless other_vertex.successors.to_set == vertex.successors.to_set
|
|
127
137
|
end
|
|
128
138
|
end
|
|
129
139
|
|
|
@@ -23,8 +23,8 @@ module Gem::Resolver::Molinillo
|
|
|
23
23
|
# (see Action#down)
|
|
24
24
|
def down(graph)
|
|
25
25
|
edge = make_edge(graph)
|
|
26
|
-
edge.origin.outgoing_edges
|
|
27
|
-
edge.destination.incoming_edges
|
|
26
|
+
delete_first(edge.origin.outgoing_edges, edge)
|
|
27
|
+
delete_first(edge.destination.incoming_edges, edge)
|
|
28
28
|
end
|
|
29
29
|
|
|
30
30
|
# @!group AddEdgeNoCircular
|
|
@@ -53,6 +53,13 @@ module Gem::Resolver::Molinillo
|
|
|
53
53
|
@destination = destination
|
|
54
54
|
@requirement = requirement
|
|
55
55
|
end
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def delete_first(array, item)
|
|
60
|
+
return unless index = array.index(item)
|
|
61
|
+
array.delete_at(index)
|
|
62
|
+
end
|
|
56
63
|
end
|
|
57
64
|
end
|
|
58
65
|
end
|
|
@@ -10,7 +10,7 @@ module Gem::Resolver::Molinillo
|
|
|
10
10
|
# @return [Object] the payload the vertex holds
|
|
11
11
|
attr_accessor :payload
|
|
12
12
|
|
|
13
|
-
# @return [
|
|
13
|
+
# @return [Array<Object>] the explicit requirements that required
|
|
14
14
|
# this vertex
|
|
15
15
|
attr_reader :explicit_requirements
|
|
16
16
|
|
|
@@ -48,7 +48,7 @@ module Gem::Resolver::Molinillo
|
|
|
48
48
|
if debug?
|
|
49
49
|
debug_info = yield
|
|
50
50
|
debug_info = debug_info.inspect unless debug_info.is_a?(String)
|
|
51
|
-
output.puts debug_info.split("\n").map { |s| '
|
|
51
|
+
output.puts debug_info.split("\n").map { |s| ' ' * depth + s }
|
|
52
52
|
end
|
|
53
53
|
end
|
|
54
54
|
|
|
@@ -52,7 +52,7 @@ module Gem::Resolver::Molinillo
|
|
|
52
52
|
@base = base
|
|
53
53
|
@states = []
|
|
54
54
|
@iteration_counter = 0
|
|
55
|
-
@
|
|
55
|
+
@parents_of = Hash.new { |h, k| h[k] = [] }
|
|
56
56
|
end
|
|
57
57
|
|
|
58
58
|
# Resolves the {#original_requested} dependencies into a full dependency
|
|
@@ -105,7 +105,7 @@ module Gem::Resolver::Molinillo
|
|
|
105
105
|
|
|
106
106
|
handle_missing_or_push_dependency_state(initial_state)
|
|
107
107
|
|
|
108
|
-
debug { "Starting resolution (#{@started_at})" }
|
|
108
|
+
debug { "Starting resolution (#{@started_at})\nUser-requested dependencies: #{original_requested}" }
|
|
109
109
|
resolver_ui.before_resolution
|
|
110
110
|
end
|
|
111
111
|
|
|
@@ -178,14 +178,14 @@ module Gem::Resolver::Molinillo
|
|
|
178
178
|
# Unwinds the states stack because a conflict has been encountered
|
|
179
179
|
# @return [void]
|
|
180
180
|
def unwind_for_conflict
|
|
181
|
-
debug(depth) { "Unwinding for conflict: #{requirement}" }
|
|
181
|
+
debug(depth) { "Unwinding for conflict: #{requirement} to #{state_index_for_unwind / 2}" }
|
|
182
182
|
conflicts.tap do |c|
|
|
183
183
|
sliced_states = states.slice!((state_index_for_unwind + 1)..-1)
|
|
184
184
|
raise VersionConflict.new(c) unless state
|
|
185
185
|
activated.rewind_to(sliced_states.first || :initial_state) if sliced_states
|
|
186
186
|
state.conflicts = c
|
|
187
187
|
index = states.size - 1
|
|
188
|
-
@
|
|
188
|
+
@parents_of.each { |_, a| a.reject! { |i| i >= index } }
|
|
189
189
|
end
|
|
190
190
|
end
|
|
191
191
|
|
|
@@ -214,7 +214,7 @@ module Gem::Resolver::Molinillo
|
|
|
214
214
|
# to the list of requirements.
|
|
215
215
|
def parent_of(requirement)
|
|
216
216
|
return unless requirement
|
|
217
|
-
return unless index = @
|
|
217
|
+
return unless index = @parents_of[requirement].last
|
|
218
218
|
return unless parent_state = @states[index]
|
|
219
219
|
parent_state.requirement
|
|
220
220
|
end
|
|
@@ -356,16 +356,25 @@ module Gem::Resolver::Molinillo
|
|
|
356
356
|
# Ensures there are no orphaned successors to the given {vertex}.
|
|
357
357
|
# @param [DependencyGraph::Vertex] vertex the vertex to fix up.
|
|
358
358
|
# @return [void]
|
|
359
|
-
def fixup_swapped_children(vertex)
|
|
359
|
+
def fixup_swapped_children(vertex) # rubocop:disable Metrics/CyclomaticComplexity
|
|
360
360
|
payload = vertex.payload
|
|
361
361
|
deps = dependencies_for(payload).group_by(&method(:name_for))
|
|
362
362
|
vertex.outgoing_edges.each do |outgoing_edge|
|
|
363
|
-
|
|
363
|
+
requirement = outgoing_edge.requirement
|
|
364
|
+
parent_index = @parents_of[requirement].last
|
|
364
365
|
succ = outgoing_edge.destination
|
|
365
366
|
matching_deps = Array(deps[succ.name])
|
|
367
|
+
dep_matched = matching_deps.include?(requirement)
|
|
368
|
+
|
|
369
|
+
# only push the current index when it was originally required by the
|
|
370
|
+
# same named spec
|
|
371
|
+
if parent_index && states[parent_index].name == name
|
|
372
|
+
@parents_of[requirement].push(states.size - 1)
|
|
373
|
+
end
|
|
374
|
+
|
|
366
375
|
if matching_deps.empty? && !succ.root? && succ.predecessors.to_a == [vertex]
|
|
367
376
|
debug(depth) { "Removing orphaned spec #{succ.name} after swapping #{name}" }
|
|
368
|
-
succ.requirements.each { |r| @
|
|
377
|
+
succ.requirements.each { |r| @parents_of.delete(r) }
|
|
369
378
|
|
|
370
379
|
removed_names = activated.detach_vertex_named(succ.name).map(&:name)
|
|
371
380
|
requirements.delete_if do |r|
|
|
@@ -373,9 +382,14 @@ module Gem::Resolver::Molinillo
|
|
|
373
382
|
# so it's safe to delete only based upon name here
|
|
374
383
|
removed_names.include?(name_for(r))
|
|
375
384
|
end
|
|
376
|
-
elsif !
|
|
385
|
+
elsif !dep_matched
|
|
386
|
+
debug(depth) { "Removing orphaned dependency #{requirement} after swapping #{name}" }
|
|
387
|
+
# also reset if we're removing the edge, but only if its parent has
|
|
388
|
+
# already been fixed up
|
|
389
|
+
@parents_of[requirement].push(states.size - 1) if @parents_of[requirement].empty?
|
|
390
|
+
|
|
377
391
|
activated.delete_edge(outgoing_edge)
|
|
378
|
-
requirements.delete(
|
|
392
|
+
requirements.delete(requirement)
|
|
379
393
|
end
|
|
380
394
|
end
|
|
381
395
|
end
|
|
@@ -395,13 +409,18 @@ module Gem::Resolver::Molinillo
|
|
|
395
409
|
# @return [Boolean] whether the current spec is satisfied as a new
|
|
396
410
|
# possibility.
|
|
397
411
|
def new_spec_satisfied?
|
|
412
|
+
unless requirement_satisfied_by?(requirement, activated, possibility)
|
|
413
|
+
debug(depth) { 'Unsatisfied by requested spec' }
|
|
414
|
+
return false
|
|
415
|
+
end
|
|
416
|
+
|
|
398
417
|
locked_requirement = locked_requirement_named(name)
|
|
399
|
-
|
|
418
|
+
|
|
400
419
|
locked_spec_satisfied = !locked_requirement ||
|
|
401
420
|
requirement_satisfied_by?(locked_requirement, activated, possibility)
|
|
402
|
-
debug(depth) { 'Unsatisfied by requested spec' } unless requested_spec_satisfied
|
|
403
421
|
debug(depth) { 'Unsatisfied by locked spec' } unless locked_spec_satisfied
|
|
404
|
-
|
|
422
|
+
|
|
423
|
+
locked_spec_satisfied
|
|
405
424
|
end
|
|
406
425
|
|
|
407
426
|
# @param [String] requirement_name the spec name to search for
|
|
@@ -417,7 +436,7 @@ module Gem::Resolver::Molinillo
|
|
|
417
436
|
# @return [void]
|
|
418
437
|
def activate_spec
|
|
419
438
|
conflicts.delete(name)
|
|
420
|
-
debug(depth) {
|
|
439
|
+
debug(depth) { "Activated #{name} at #{possibility}" }
|
|
421
440
|
activated.set_payload(name, possibility)
|
|
422
441
|
require_nested_dependencies_for(possibility)
|
|
423
442
|
end
|
|
@@ -432,7 +451,8 @@ module Gem::Resolver::Molinillo
|
|
|
432
451
|
nested_dependencies.each do |d|
|
|
433
452
|
activated.add_child_vertex(name_for(d), nil, [name_for(activated_spec)], d)
|
|
434
453
|
parent_index = states.size - 1
|
|
435
|
-
@
|
|
454
|
+
parents = @parents_of[d]
|
|
455
|
+
parents << parent_index if parents.empty?
|
|
436
456
|
end
|
|
437
457
|
|
|
438
458
|
push_state_for_requirements(requirements + nested_dependencies, !nested_dependencies.empty?)
|
data/lib/rubygems/test_case.rb
CHANGED
|
@@ -1334,7 +1334,7 @@ Also, a list:
|
|
|
1334
1334
|
end
|
|
1335
1335
|
|
|
1336
1336
|
##
|
|
1337
|
-
# create_gemspec creates gem specification in given +
|
|
1337
|
+
# create_gemspec creates gem specification in given +directory+ or '.'
|
|
1338
1338
|
# for the given +name+ and +version+.
|
|
1339
1339
|
#
|
|
1340
1340
|
# Yields the +specification+ to the block, if given
|
data/test/rubygems/test_gem.rb
CHANGED
|
@@ -1434,14 +1434,6 @@ class TestGem < Gem::TestCase
|
|
|
1434
1434
|
|
|
1435
1435
|
install_specs a, b, c
|
|
1436
1436
|
|
|
1437
|
-
path = File.join @tempdir, "gem.deps.rb"
|
|
1438
|
-
|
|
1439
|
-
File.open path, "w" do |f|
|
|
1440
|
-
f.puts "gem 'a'"
|
|
1441
|
-
f.puts "gem 'b'"
|
|
1442
|
-
f.puts "gem 'c'"
|
|
1443
|
-
end
|
|
1444
|
-
|
|
1445
1437
|
path = File.join(@tempdir, "gd-tmp")
|
|
1446
1438
|
install_gem a, :install_dir => path
|
|
1447
1439
|
install_gem b, :install_dir => path
|
|
@@ -1450,10 +1442,27 @@ class TestGem < Gem::TestCase
|
|
|
1450
1442
|
ENV['GEM_PATH'] = path
|
|
1451
1443
|
ENV['RUBYGEMS_GEMDEPS'] = "-"
|
|
1452
1444
|
|
|
1453
|
-
|
|
1454
|
-
|
|
1445
|
+
path = File.join @tempdir, "gem.deps.rb"
|
|
1446
|
+
cmd = [Gem.ruby.dup.untaint, "-I#{LIB_PATH.untaint}", "-rubygems"]
|
|
1447
|
+
if RUBY_VERSION < '1.9'
|
|
1448
|
+
cmd << "-e 'puts Gem.loaded_specs.values.map(&:full_name).sort'"
|
|
1449
|
+
cmd = cmd.join(' ')
|
|
1450
|
+
else
|
|
1451
|
+
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
|
1452
|
+
end
|
|
1453
|
+
|
|
1454
|
+
File.open path, "w" do |f|
|
|
1455
|
+
f.puts "gem 'a'"
|
|
1456
|
+
end
|
|
1457
|
+
out0 = IO.popen(cmd, &:read).split(/\n/)
|
|
1458
|
+
|
|
1459
|
+
File.open path, "a" do |f|
|
|
1460
|
+
f.puts "gem 'b'"
|
|
1461
|
+
f.puts "gem 'c'"
|
|
1462
|
+
end
|
|
1463
|
+
out = IO.popen(cmd, &:read).split(/\n/)
|
|
1455
1464
|
|
|
1456
|
-
assert_equal
|
|
1465
|
+
assert_equal ["b-1", "c-1"], out - out0
|
|
1457
1466
|
end
|
|
1458
1467
|
|
|
1459
1468
|
def test_looks_for_gemdeps_files_automatically_on_start_in_parent_dir
|
|
@@ -1465,14 +1474,6 @@ class TestGem < Gem::TestCase
|
|
|
1465
1474
|
|
|
1466
1475
|
install_specs a, b, c
|
|
1467
1476
|
|
|
1468
|
-
path = File.join @tempdir, "gem.deps.rb"
|
|
1469
|
-
|
|
1470
|
-
File.open path, "w" do |f|
|
|
1471
|
-
f.puts "gem 'a'"
|
|
1472
|
-
f.puts "gem 'b'"
|
|
1473
|
-
f.puts "gem 'c'"
|
|
1474
|
-
end
|
|
1475
|
-
|
|
1476
1477
|
path = File.join(@tempdir, "gd-tmp")
|
|
1477
1478
|
install_gem a, :install_dir => path
|
|
1478
1479
|
install_gem b, :install_dir => path
|
|
@@ -1482,14 +1483,30 @@ class TestGem < Gem::TestCase
|
|
|
1482
1483
|
ENV['RUBYGEMS_GEMDEPS'] = "-"
|
|
1483
1484
|
|
|
1484
1485
|
Dir.mkdir "sub1"
|
|
1485
|
-
|
|
1486
|
-
|
|
1486
|
+
|
|
1487
|
+
path = File.join @tempdir, "gem.deps.rb"
|
|
1488
|
+
cmd = [Gem.ruby.dup.untaint, "-Csub1", "-I#{LIB_PATH.untaint}", "-rubygems"]
|
|
1489
|
+
if RUBY_VERSION < '1.9'
|
|
1490
|
+
cmd << "-e 'puts Gem.loaded_specs.values.map(&:full_name).sort'"
|
|
1491
|
+
cmd = cmd.join(' ')
|
|
1492
|
+
else
|
|
1493
|
+
cmd << "-eputs Gem.loaded_specs.values.map(&:full_name).sort"
|
|
1494
|
+
end
|
|
1495
|
+
|
|
1496
|
+
File.open path, "w" do |f|
|
|
1497
|
+
f.puts "gem 'a'"
|
|
1498
|
+
end
|
|
1499
|
+
out0 = IO.popen(cmd, &:read).split(/\n/)
|
|
1500
|
+
|
|
1501
|
+
File.open path, "a" do |f|
|
|
1502
|
+
f.puts "gem 'b'"
|
|
1503
|
+
f.puts "gem 'c'"
|
|
1487
1504
|
end
|
|
1488
|
-
out.
|
|
1505
|
+
out = IO.popen(cmd, &:read).split(/\n/)
|
|
1489
1506
|
|
|
1490
1507
|
Dir.rmdir "sub1"
|
|
1491
1508
|
|
|
1492
|
-
assert_equal
|
|
1509
|
+
assert_equal ["b-1", "c-1"], out - out0
|
|
1493
1510
|
end
|
|
1494
1511
|
|
|
1495
1512
|
def test_register_default_spec
|
|
@@ -521,11 +521,11 @@ class TestGemResolver < Gem::TestCase
|
|
|
521
521
|
assert_equal req('>= 0'), dependency.requirement
|
|
522
522
|
|
|
523
523
|
activated = e.conflict.activated
|
|
524
|
-
assert_equal 'c-
|
|
524
|
+
assert_equal 'c-1', activated.full_name
|
|
525
525
|
|
|
526
|
-
assert_equal dep('c', '
|
|
526
|
+
assert_equal dep('c', '= 1'), activated.request.dependency
|
|
527
527
|
|
|
528
|
-
assert_equal [dep('c', '
|
|
528
|
+
assert_equal [dep('c', '>= 2'), dep('c', '= 1')],
|
|
529
529
|
e.conflict.conflicting_dependencies
|
|
530
530
|
end
|
|
531
531
|
|
data/util/patch_with_prs.rb
CHANGED
|
@@ -68,6 +68,7 @@ File.open(version_file, "w") {|f| f.write(version_contents) }
|
|
|
68
68
|
confirm "Update changelog"
|
|
69
69
|
sh("git", "commit", "-am", "Version #{version} with changelog")
|
|
70
70
|
sh("rake", "release", "VERSION=#{version}")
|
|
71
|
+
sh("git", "push")
|
|
71
72
|
sh("git", "checkout", "master")
|
|
72
73
|
sh("git", "pull")
|
|
73
74
|
unless system("git", "merge", "v#{version}", "--no-edit")
|
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: 2.6.
|
|
4
|
+
version: 2.6.11
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jim Weirich
|
|
@@ -10,7 +10,7 @@ authors:
|
|
|
10
10
|
autorequire:
|
|
11
11
|
bindir: bin
|
|
12
12
|
cert_chain: []
|
|
13
|
-
date: 2017-
|
|
13
|
+
date: 2017-03-17 00:00:00.000000000 Z
|
|
14
14
|
dependencies:
|
|
15
15
|
- !ruby/object:Gem::Dependency
|
|
16
16
|
name: builder
|
|
@@ -800,7 +800,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
800
800
|
version: '0'
|
|
801
801
|
requirements: []
|
|
802
802
|
rubyforge_project:
|
|
803
|
-
rubygems_version: 2.6.
|
|
803
|
+
rubygems_version: 2.6.10
|
|
804
804
|
signing_key:
|
|
805
805
|
specification_version: 4
|
|
806
806
|
summary: RubyGems is a package management framework for Ruby
|