From f781921d50493a886d6b214af7b77ae293ee1a7d Mon Sep 17 00:00:00 2001 From: Casey Dahlin Date: Fri, 3 Oct 2008 17:14:58 -0400 Subject: Fix depsolving logic to handle depless services Services with no dependencies no longer cause failure --- state.rb | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/state.rb b/state.rb index 6912b49..9bc8e34 100644 --- a/state.rb +++ b/state.rb @@ -195,11 +195,19 @@ class State active_states = @@states.select{ |x| x.active } candidates = @depends.map{ |d| active_states.select{ |s| d.match s } } return nil if candidates.include? [] - candidates[0].product(*candidates[1..-1]).map{ |x| x.to_set } \ - .select{ |x| x.inject(true){ |st, y| st and y.rooted_in x } } \ - .reject do |dset| - active_states.select{ |x| x.is_a? self and x.deps == dset }.size > 0 - end.each{ |x| self.new x } + + unless candidates == [] + candidates = candidates[0].product(*candidates[1..-1]).map{ |x| x.to_set } \ + .select{ |x| x.size == 0 or x.inject(true){ |st, y| st and y.rooted_in x } } + else + candidates = [Set.new] + end + + candidates.reject! do |dset| + active_states.select{ |x| x.is_a? self and x.deps == dset }.size > 0 + end + + candidates.each{ |x| self.new x } end # Depsolve all state classes. This method is not defined in subclasses of -- cgit