molinillo 0.1.1 → 0.1.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/molinillo/dependency_graph.rb +1 -0
- data/lib/molinillo/gem_metadata.rb +1 -1
- data/lib/molinillo/resolution.rb +28 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3c0e6948c750e17cfaf091e5cd1f94ac58e4bffe
|
4
|
+
data.tar.gz: 64427be3edf97f492aef46c7c6eb69f1e262e25e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2e11fb6bebe0f6797d7c855cfe92aef39054a7d82cccb9e6b78b080bb69bdb9455aa4e8b13fc613a4acd3c430fb3a6faf96ae5d63663404f377a95bbc417136e
|
7
|
+
data.tar.gz: e4d395af07f86d361e5fa47c13e098f3ee77f4f878311a93c9a64bcbc87d1775837233f2096ccc84196a2b13c68586852097ad1e866e9814e09212a8d82c5dda
|
@@ -102,6 +102,7 @@ module Molinillo
|
|
102
102
|
# @return [void]
|
103
103
|
def detach_vertex_named(name)
|
104
104
|
vertex = vertex_named(name)
|
105
|
+
return unless vertex
|
105
106
|
successors = vertex.successors
|
106
107
|
vertices.delete(name)
|
107
108
|
edges.reject! { |e| e.origin == vertex || e.destination == vertex }
|
data/lib/molinillo/resolution.rb
CHANGED
@@ -3,12 +3,14 @@ module Molinillo
|
|
3
3
|
# A specific resolution from a given {Resolver}
|
4
4
|
class Resolution
|
5
5
|
# A conflict that the resolution process encountered
|
6
|
+
# @attr [Object] requirement the requirement that immediately led to the conflict
|
6
7
|
# @attr [{String,Nil=>[Object]}] requirements the requirements that caused the conflict
|
7
8
|
# @attr [Object, nil] existing the existing spec that was in conflict with
|
8
9
|
# the {#possibility}
|
9
10
|
# @attr [Object] possibility the spec that was unable to be activated due
|
10
11
|
# to a conflict
|
11
12
|
Conflict = Struct.new(
|
13
|
+
:requirement,
|
12
14
|
:requirements,
|
13
15
|
:existing,
|
14
16
|
:possibility
|
@@ -55,7 +57,7 @@ module Molinillo
|
|
55
57
|
break unless state.requirements.any? || state.requirement
|
56
58
|
indicate_progress
|
57
59
|
if state.respond_to?(:pop_possibility_state) # DependencyState
|
58
|
-
debug(depth) { "Creating possibility state (#{possibilities.count} remaining)" }
|
60
|
+
debug(depth) { "Creating possibility state for #{requirement} (#{possibilities.count} remaining)" }
|
59
61
|
state.pop_possibility_state.tap { |s| states.push(s) if s }
|
60
62
|
end
|
61
63
|
process_topmost_state
|
@@ -172,15 +174,27 @@ module Molinillo
|
|
172
174
|
# Unwinds the states stack because a conflict has been encountered
|
173
175
|
# @return [void]
|
174
176
|
def unwind_for_conflict
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
177
|
+
debug(depth) { "Unwinding for conflict: #{requirement}" }
|
178
|
+
conflicts.tap do |c|
|
179
|
+
states.slice!(state_index_for_unwind..-1)
|
180
|
+
states.pop if state
|
181
|
+
raise VersionConflict.new(c) unless state
|
182
|
+
state.conflicts = c
|
183
|
+
end
|
184
|
+
end
|
185
|
+
|
186
|
+
# @return [Integer] The index to which the resolution should unwind in the
|
187
|
+
# case of conflict.
|
188
|
+
def state_index_for_unwind
|
189
|
+
index = states.rindex do |state|
|
190
|
+
return nil unless vertex = state.activated.vertex_named(name)
|
191
|
+
state.is_a?(DependencyState) &&
|
192
|
+
(
|
193
|
+
!vertex.payload ||
|
194
|
+
(!state.requirements.include?(requirement) && state.requirement != requirement)
|
195
|
+
)
|
183
196
|
end
|
197
|
+
index + 2
|
184
198
|
end
|
185
199
|
|
186
200
|
# @return [Conflict] a {Conflict} that reflects the failure to activate
|
@@ -194,7 +208,8 @@ module Molinillo
|
|
194
208
|
}
|
195
209
|
vertex.incoming_edges.each { |edge| (requirements[edge.origin.payload] ||= []).unshift(*edge.requirements) }
|
196
210
|
conflicts[name] = Conflict.new(
|
197
|
-
|
211
|
+
requirement,
|
212
|
+
Hash[requirements.select { |_, r| !r.empty? }],
|
198
213
|
existing,
|
199
214
|
possibility
|
200
215
|
)
|
@@ -229,7 +244,8 @@ module Molinillo
|
|
229
244
|
def attempt_to_activate
|
230
245
|
debug(depth) { 'Attempting to activate ' + possibility.to_s }
|
231
246
|
existing_node = activated.vertex_named(name)
|
232
|
-
if existing_node
|
247
|
+
if existing_node.payload
|
248
|
+
debug(depth) { "Found existing spec (#{existing_node.payload})" }
|
233
249
|
attempt_to_activate_existing_spec(existing_node)
|
234
250
|
else
|
235
251
|
attempt_to_activate_new_spec
|
@@ -246,7 +262,7 @@ module Molinillo
|
|
246
262
|
push_state_for_requirements(new_requirements)
|
247
263
|
else
|
248
264
|
create_conflict
|
249
|
-
debug(depth) {
|
265
|
+
debug(depth) { "Unsatisfied by existing spec (#{existing_node.payload})" }
|
250
266
|
unwind_for_conflict
|
251
267
|
end
|
252
268
|
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.1.
|
4
|
+
version: 0.1.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: 2014-11-
|
11
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|