molinillo 0.5.1 → 0.5.2
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 +4 -4
- data/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/molinillo/resolution.rb +10 -3
- data/spec/resolver_spec.rb +63 -17
- data/spec/spec_helper/index.rb +16 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 07ba133d4a53675053e7dcd0951237049e522ea8
|
4
|
+
data.tar.gz: 21ef570c95d650318652b77f24a68b46fa60b3db
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cb2eb17979338fb368d96effa38d25aa7fc3a19e97e3c41dc4c4e36290260d00d43fe1b206481122d1b4e708963bbb43eb7833c868566e1ff4364840671b1797
|
7
|
+
data.tar.gz: 2541587694311be9e41ee3f7778e996fcb01b5d5ad10b25d5a5db7cc00fbad5164b26f5b63ed4ec12534f19dcd3d18fa2ca6212c85ca7719d21094f27a139d4d
|
data/lib/molinillo/resolution.rb
CHANGED
@@ -356,10 +356,14 @@ module Molinillo
|
|
356
356
|
# @return [void]
|
357
357
|
def fixup_swapped_children(vertex)
|
358
358
|
payload = vertex.payload
|
359
|
-
|
360
|
-
vertex.
|
361
|
-
|
359
|
+
deps = dependencies_for(payload).group_by(&method(:name_for))
|
360
|
+
vertex.outgoing_edges.each do |outgoing_edge|
|
361
|
+
@parent_of[outgoing_edge.requirement] = states.size - 1
|
362
|
+
succ = outgoing_edge.destination
|
363
|
+
matching_deps = Array(deps[succ.name])
|
364
|
+
if matching_deps.empty? && !succ.root? && succ.predecessors.to_a == [vertex]
|
362
365
|
debug(depth) { "Removing orphaned spec #{succ.name} after swapping #{name}" }
|
366
|
+
succ.requirements.each { |r| @parent_of.delete(r) }
|
363
367
|
activated.detach_vertex_named(succ.name)
|
364
368
|
|
365
369
|
all_successor_names = succ.recursive_successors.map(&:name)
|
@@ -368,7 +372,10 @@ module Molinillo
|
|
368
372
|
requirement_name = name_for(requirement)
|
369
373
|
(requirement_name == succ.name) || all_successor_names.include?(requirement_name)
|
370
374
|
end
|
375
|
+
elsif !matching_deps.include?(outgoing_edge.requirement)
|
376
|
+
outgoing_edge.requirement = matching_deps.first
|
371
377
|
end
|
378
|
+
matching_deps.delete(outgoing_edge.requirement)
|
372
379
|
end
|
373
380
|
end
|
374
381
|
|
data/spec/resolver_spec.rb
CHANGED
@@ -122,28 +122,13 @@ module Molinillo
|
|
122
122
|
end
|
123
123
|
|
124
124
|
it 'can resolve when two specs have the same dependencies' do
|
125
|
-
|
126
|
-
# The bug we want to write a regression test for only occurs when
|
127
|
-
# Molinillo processes dependencies in a specific order for the given
|
128
|
-
# index and demands. This sorting logic ensures we hit the repro case
|
129
|
-
def sort_dependencies(dependencies, activated, conflicts)
|
130
|
-
dependencies.sort_by do |dependency|
|
131
|
-
name = name_for(dependency)
|
132
|
-
[
|
133
|
-
activated.vertex_named(name).payload ? 0 : 1,
|
134
|
-
conflicts[name] ? 0 : 1,
|
135
|
-
activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
|
136
|
-
]
|
137
|
-
end
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
index = bundler_index.new('rubygems-2016-09-11')
|
125
|
+
index = BundlerIndex.new('rubygems-2016-09-11')
|
142
126
|
@resolver = described_class.new(index, TestUI.new)
|
143
127
|
demands = [
|
144
128
|
VersionKit::Dependency.new('chef', '~> 12.1.2'),
|
145
129
|
]
|
146
130
|
|
131
|
+
demands.each { |d| index.search_for(d) }
|
147
132
|
resolved = @resolver.resolve(demands, DependencyGraph.new)
|
148
133
|
|
149
134
|
expected = [
|
@@ -196,6 +181,67 @@ module Molinillo
|
|
196
181
|
expect(resolved.map(&:payload).map(&:to_s)).to match_array(expected)
|
197
182
|
end
|
198
183
|
|
184
|
+
it 'can resolve when two specs have the same dependencies and swapping happens' do
|
185
|
+
index = BundlerIndex.new('rubygems-2016-10-06')
|
186
|
+
@resolver = described_class.new(index, TestUI.new)
|
187
|
+
demands = [
|
188
|
+
VersionKit::Dependency.new('avro_turf', '0.6.2'),
|
189
|
+
VersionKit::Dependency.new('fog', '1.38.0'),
|
190
|
+
]
|
191
|
+
demands.each { |d| index.search_for(d) }
|
192
|
+
|
193
|
+
resolved = @resolver.resolve(demands, DependencyGraph.new)
|
194
|
+
|
195
|
+
expected = [
|
196
|
+
'pkg-config (1.1.7)',
|
197
|
+
'CFPropertyList (2.3.3)',
|
198
|
+
'multi_json (1.12.1)',
|
199
|
+
'excon (0.45.4)',
|
200
|
+
'builder (3.2.2)',
|
201
|
+
'formatador (0.2.5)',
|
202
|
+
'ipaddress (0.8.3)',
|
203
|
+
'xml-simple (1.1.5)',
|
204
|
+
'mini_portile2 (2.1.0)',
|
205
|
+
'inflecto (0.0.2)',
|
206
|
+
'trollop (2.1.2)',
|
207
|
+
'fission (0.5.0)',
|
208
|
+
'avro (1.8.1)',
|
209
|
+
'fog-core (1.37.0)',
|
210
|
+
'nokogiri (1.6.8)',
|
211
|
+
'avro_turf (0.6.2)',
|
212
|
+
'fog-json (1.0.2)',
|
213
|
+
'fog-local (0.3.0)',
|
214
|
+
'fog-vmfusion (0.1.0)',
|
215
|
+
'fog-xml (0.1.2)',
|
216
|
+
'rbvmomi (1.8.2)',
|
217
|
+
'fog-aliyun (0.1.0)',
|
218
|
+
'fog-brightbox (0.11.0)',
|
219
|
+
'fog-sakuracloud (1.7.5)',
|
220
|
+
'fog-serverlove (0.1.2)',
|
221
|
+
'fog-softlayer (1.1.4)',
|
222
|
+
'fog-storm_on_demand (0.1.1)',
|
223
|
+
'fog-atmos (0.1.0)',
|
224
|
+
'fog-aws (0.9.2)',
|
225
|
+
'fog-cloudatcost (0.1.2)',
|
226
|
+
'fog-dynect (0.0.3)',
|
227
|
+
'fog-ecloud (0.3.0)',
|
228
|
+
'fog-google (0.1.0)',
|
229
|
+
'fog-openstack (0.1.3)',
|
230
|
+
'fog-powerdns (0.1.1)',
|
231
|
+
'fog-profitbricks (0.0.5)',
|
232
|
+
'fog-rackspace (0.1.1)',
|
233
|
+
'fog-radosgw (0.0.5)',
|
234
|
+
'fog-riakcs (0.1.0)',
|
235
|
+
'fog-terremark (0.1.0)',
|
236
|
+
'fog-voxel (0.1.0)',
|
237
|
+
'fog-xenserver (0.2.3)',
|
238
|
+
'fog-vsphere (1.2.0)',
|
239
|
+
'fog (1.38.0)',
|
240
|
+
]
|
241
|
+
|
242
|
+
expect(resolved.map(&:payload).map(&:to_s).sort).to eq(expected.sort)
|
243
|
+
end
|
244
|
+
|
199
245
|
# Regression test. See: https://github.com/CocoaPods/Molinillo/pull/38
|
200
246
|
it 'can resolve when swapping children with successors' do
|
201
247
|
swap_child_with_successors_index = Class.new(TestIndex) do
|
data/spec/spec_helper/index.rb
CHANGED
@@ -61,4 +61,20 @@ module Molinillo
|
|
61
61
|
end
|
62
62
|
end
|
63
63
|
end
|
64
|
+
|
65
|
+
class BundlerIndex < TestIndex
|
66
|
+
# Some bugs we want to write a regression test for only occurs when
|
67
|
+
# Molinillo processes dependencies in a specific order for the given
|
68
|
+
# index and demands. This sorting logic ensures we hit the repro case
|
69
|
+
def sort_dependencies(dependencies, activated, conflicts)
|
70
|
+
dependencies.sort_by do |dependency|
|
71
|
+
name = name_for(dependency)
|
72
|
+
[
|
73
|
+
activated.vertex_named(name).payload ? 0 : 1,
|
74
|
+
conflicts[name] ? 0 : 1,
|
75
|
+
activated.vertex_named(name).payload ? 0 : search_for(dependency).count,
|
76
|
+
]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
64
80
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: molinillo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Samuel E. Giddins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-24 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -96,7 +96,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
96
|
version: '0'
|
97
97
|
requirements: []
|
98
98
|
rubyforge_project:
|
99
|
-
rubygems_version: 2.6.
|
99
|
+
rubygems_version: 2.6.7
|
100
100
|
signing_key:
|
101
101
|
specification_version: 4
|
102
102
|
summary: Provides support for dependency resolution
|