solve 0.4.0.rc1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile CHANGED
@@ -27,7 +27,7 @@ group :development do
27
27
  end rescue Errno::ENOENT
28
28
 
29
29
  elsif RbConfig::CONFIG['target_os'] =~ /linux/i
30
- gem 'libnotify', '~> 0.7.1', require: false
30
+ gem 'libnotify', '~> 0.8.0', require: false
31
31
  gem 'rb-inotify', require: false
32
32
 
33
33
  elsif RbConfig::CONFIG['target_os'] =~ /mswin|mingw/i
@@ -1,3 +1,3 @@
1
1
  module Solve
2
- VERSION = "0.4.0.rc1"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/solve/solver.rb CHANGED
@@ -96,6 +96,10 @@ module Solve
96
96
  while unbound_variable = variable_table.first_unbound
97
97
  possible_values_for_unbound = possible_values_for(unbound_variable)
98
98
  trace("Searching for a value for #{unbound_variable.artifact}")
99
+ trace("Constraints are")
100
+ constraint_table.constraints_on_artifact(unbound_variable.artifact).each do |constraint|
101
+ trace("\t#{constraint}")
102
+ end
99
103
  trace("Possible values are #{possible_values_for_unbound}")
100
104
 
101
105
  while possible_value = possible_values_for_unbound.shift
@@ -233,15 +237,29 @@ module Solve
233
237
  constraint_table.add(dependency, source)
234
238
  dependency_domain = graph.versions(dependency.name, dependency.constraint)
235
239
  domain[dependency.name] = [(domain[dependency.name] || []), dependency_domain]
236
- .flatten
237
- .uniq
238
- .sort { |left, right| right.version <=> left.version }
240
+ .flatten
241
+ .uniq
242
+ .sort { |left, right| right.version <=> left.version }
243
+
244
+ #if the variable we are constraining is still unbound, we want to filter
245
+ #its possible values, if its already bound, we know its ok to add this constraint because
246
+ #we can never change a previously bound value without removing this constraint and we check above
247
+ #whether or not its ok to add this constraint given the current value
248
+
249
+ variable = variable_table.find_artifact(dependency.name)
250
+ if variable.value.nil?
251
+ reset_possible_values_for(variable)
252
+ end
253
+
239
254
  end
240
255
  end
241
256
 
242
257
  def reset_possible_values_for(variable)
258
+ trace("Resetting possible values for #{variable.artifact}")
243
259
  possible_values[variable.artifact] = nil
244
- possible_values_for(variable)
260
+ x = possible_values_for(variable)
261
+ trace("Possible values are #{x}")
262
+ x
245
263
  end
246
264
 
247
265
  def backtrack(unbound_variable)
@@ -158,4 +158,37 @@ describe "Solutions" do
158
158
  "D" => "0.0.0"})
159
159
 
160
160
  end
161
+
162
+ it "correctly resolves when a resolution exists but it is not the latest" do
163
+ graph = Solve::Graph.new
164
+
165
+ graph.artifacts("get-the-old-one", "1.0.0")
166
+ .depends("locked-mid-1", ">= 0.0.0")
167
+ .depends("locked-mid-2", ">= 0.0.0")
168
+ graph.artifacts("get-the-old-one", "0.5.0")
169
+
170
+ graph.artifacts("locked-mid-1", "2.0.0").depends("old-bottom", "= 2.0.0")
171
+ graph.artifacts("locked-mid-1", "1.3.0").depends("old-bottom", "= 0.5.0")
172
+ graph.artifacts("locked-mid-1", "1.0.0")
173
+
174
+ graph.artifacts("locked-mid-2", "2.0.0").depends("old-bottom", "= 2.1.0")
175
+ graph.artifacts("locked-mid-2", "1.4.0").depends("old-bottom", "= 0.5.0")
176
+ graph.artifacts("locked-mid-2", "1.0.0")
177
+
178
+ graph.artifacts("old-bottom", "2.1.0")
179
+ graph.artifacts("old-bottom", "2.0.0")
180
+ graph.artifacts("old-bottom", "1.0.0")
181
+ graph.artifacts("old-bottom", "0.5.0")
182
+
183
+ demands = [["get-the-old-one"]]
184
+
185
+ result = Solve.it!(graph, demands)
186
+
187
+ result.should eql({
188
+ "get-the-old-one" => "1.0.0",
189
+ "locked-mid-1" => "2.0.0",
190
+ "locked-mid-2" => "1.0.0",
191
+ "old-bottom" => "2.0.0"
192
+ })
193
+ end
161
194
  end
metadata CHANGED
@@ -1,8 +1,8 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solve
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0.rc1
5
- prerelease: 6
4
+ version: 0.4.0
5
+ prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Jamie Winsor
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2012-10-16 00:00:00.000000000 Z
14
+ date: 2012-10-31 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: json
@@ -88,9 +88,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
88
88
  required_rubygems_version: !ruby/object:Gem::Requirement
89
89
  none: false
90
90
  requirements:
91
- - - ! '>'
91
+ - - ! '>='
92
92
  - !ruby/object:Gem::Version
93
- version: 1.3.1
93
+ version: '0'
94
+ segments:
95
+ - 0
96
+ hash: 1956860020299401788
94
97
  requirements: []
95
98
  rubyforge_project:
96
99
  rubygems_version: 1.8.23