From 2ff286cf1d536bf6c83e81233726ffbf4688d21e Mon Sep 17 00:00:00 2001
From: Steven Armstrong <steven@icarus.ethz.ch>
Date: Wed, 25 Apr 2012 17:18:16 +0200
Subject: [PATCH] inherit dependencies from defining object when setting up
 implicit dependencies through autorequire

Signed-off-by: Steven Armstrong <steven@icarus.ethz.ch>
---
 lib/cdist/emulator.py | 19 ++++++++++++++-----
 1 file changed, 14 insertions(+), 5 deletions(-)

diff --git a/lib/cdist/emulator.py b/lib/cdist/emulator.py
index c4b84feb..99b34554 100644
--- a/lib/cdist/emulator.py
+++ b/lib/cdist/emulator.py
@@ -160,10 +160,19 @@ class Emulator(object):
     def record_auto_requirements(self):
         """An object shall automatically depend on all objects that it defined in it's type manifest.
         """
-        # __object_name is the name of the object whose type manifest is currenlty executed
+        # __object_name is the name of the object whose type manifest is currently executed
         __object_name = os.environ.get('__object_name', None)
         if __object_name:
-            _object = self.cdist_object.object_from_name(__object_name)
-            # prevent circular dependencies
-            if not _object.name in self.cdist_object.requirements:
-                _object.requirements.append(self.cdist_object.name)
+            # The object whose type manifest is currently run
+            parent = self.cdist_object.object_from_name(__object_name)
+            # The object currently being defined
+            current_object = self.cdist_object
+            # current_object shall have all dependencies that it's parent has
+            for req in parent.requirements:
+                if req not in current_object.requirements:
+                    current_object.requirements.append(req)
+            # As parent defined current_object it shall automatically depend on it.
+            # But only if the user hasn't said otherwise.
+            # Must prevent circular dependencies.
+            if not parent.name in current_object.requirements:
+                parent.requirements.append(current_object.name)