From b2686f3b131cc7e2f44d3ea081401bc6896b989e Mon Sep 17 00:00:00 2001
From: Nico Schottelius <nico@bento.schottelius.org>
Date: Thu, 20 Jun 2013 11:24:47 +0200
Subject: [PATCH] factor out iterate code to be able to test it for one, two,
 ... runs

Signed-off-by: Nico Schottelius <nico@bento.schottelius.org>
---
 cdist/config_install.py | 55 +++++++++++++++++++++++++----------------
 1 file changed, 34 insertions(+), 21 deletions(-)

diff --git a/cdist/config_install.py b/cdist/config_install.py
index 43bfb7e4..baf76f0a 100644
--- a/cdist/config_install.py
+++ b/cdist/config_install.py
@@ -75,32 +75,45 @@ class ConfigInstall(object):
                                                          self.context.local.type_path):
             yield cdist_object
 
+    def iterate_once(self):
+        """
+            Iterate over the objects once - helper method for 
+            iterate_until_finished
+        """
+        objects_changed  = False
+
+        for cdist_object in self.object_list():
+            if cdist_object.requirements_unfinished(cdist_object.requirements):
+                """We cannot do anything for this poor object"""
+                continue
+        
+            if cdist_object.state == core.CdistObject.STATE_UNDEF:
+                """Prepare the virgin object"""
+        
+                self.object_prepare(cdist_object)
+                objects_changed = True
+        
+            if cdist_object.requirements_unfinished(cdist_object.autorequire):
+                """The previous step created objects we depend on - wait for them"""
+                continue
+        
+            if cdist_object.state == core.CdistObject.STATE_PREPARED:
+                self.object_run(cdist_object)
+                objects_changed = True
+
+        return objects_changed
+
+
     def iterate_until_finished(self):
-        # Continue process until no new objects are created anymore
+        """
+            Go through all objects and solve them
+            one after another
+        """
 
         objects_changed = True
 
         while objects_changed:
-            objects_changed  = False
-
-            for cdist_object in self.object_list():
-                if cdist_object.requirements_unfinished(cdist_object.requirements):
-                    """We cannot do anything for this poor object"""
-                    continue
-
-                if cdist_object.state == core.CdistObject.STATE_UNDEF:
-                    """Prepare the virgin object"""
-
-                    self.object_prepare(cdist_object)
-                    objects_changed = True
-
-                if cdist_object.requirements_unfinished(cdist_object.autorequire):
-                    """The previous step created objects we depend on - wait for them"""
-                    continue
-
-                if cdist_object.state == core.CdistObject.STATE_PREPARED:
-                    self.object_run(cdist_object)
-                    objects_changed = True
+            objects_changed = self.iterate_once()
 
         # Check whether all objects have been finished
         unfinished_objects = []