From 1952d43073f571ec0b4c1bb19d8203876866fab8 Mon Sep 17 00:00:00 2001
From: Darko Poljak <darko.poljak@gmail.com>
Date: Wed, 7 Dec 2016 19:06:51 +0100
Subject: [PATCH] Initial try for parallelization.

---
 cdist/config.py | 41 +++++++++++++++++++++++++++++++++++++----
 1 file changed, 37 insertions(+), 4 deletions(-)

diff --git a/cdist/config.py b/cdist/config.py
index a20a4840..f3faa03a 100644
--- a/cdist/config.py
+++ b/cdist/config.py
@@ -267,11 +267,44 @@ class Config(object):
             else:
                 yield cdist_object
 
-    def iterate_once_parallel(self):
+    def iterate_once(self):
         """
             Iterate over the objects once - helper method for
             iterate_until_finished
         """
+        if self.jobs:
+            objects_changed = self._iterate_once_parallel()
+        else:
+            objects_changed = self._iterate_once_sequential()
+        return objects_changed
+
+    def _iterate_once_sequential(self):
+        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_once_parallel(self):
         objects_changed = False
 
         cargo = []
@@ -300,7 +333,8 @@ class Config(object):
                 continue
 
             if cdist_object.state == core.CdistObject.STATE_PREPARED:
-                if cdist_object.requirements_unfinished(cdist_object.autorequire):
+                if cdist_object.requirements_unfinished(
+                        cdist_object.autorequire):
                     """The previous step created objects we depend on -
                     wait for them
                     """
@@ -327,8 +361,7 @@ class Config(object):
         objects_changed = True
 
         while objects_changed:
-            if self.jobs:
-                objects_changed = self.iterate_once_parallel()
+            objects_changed = self.iterate_once()
 
         # Check whether all objects have been finished
         unfinished_objects = []