forked from ungleich-public/cdist
Merge branch 'feature/type-relationship-graph' into 'master'
Implement maintaining object relationship graph See merge request ungleich-public/cdist!986
This commit is contained in:
commit
28c13bd29b
3 changed files with 43 additions and 0 deletions
|
@ -247,6 +247,13 @@ class CdistObject:
|
||||||
lambda obj: os.path.join(obj.absolute_path, 'typeorder'))
|
lambda obj: os.path.join(obj.absolute_path, 'typeorder'))
|
||||||
typeorder_dep = fsproperty.FileListProperty(
|
typeorder_dep = fsproperty.FileListProperty(
|
||||||
lambda obj: os.path.join(obj.absolute_path, 'typeorder_dep'))
|
lambda obj: os.path.join(obj.absolute_path, 'typeorder_dep'))
|
||||||
|
# objects without parents are objects specified in init manifest
|
||||||
|
parents = fsproperty.FileListProperty(
|
||||||
|
lambda obj: os.path.join(obj.absolute_path, 'parents'))
|
||||||
|
# objects without children are object of types that do not reuse other
|
||||||
|
# types
|
||||||
|
children = fsproperty.FileListProperty(
|
||||||
|
lambda obj: os.path.join(obj.absolute_path, 'children'))
|
||||||
|
|
||||||
def cleanup(self):
|
def cleanup(self):
|
||||||
try:
|
try:
|
||||||
|
|
|
@ -106,6 +106,7 @@ class Emulator:
|
||||||
self.save_stdin()
|
self.save_stdin()
|
||||||
self.record_requirements()
|
self.record_requirements()
|
||||||
self.record_auto_requirements()
|
self.record_auto_requirements()
|
||||||
|
self.record_parent_child_relationships()
|
||||||
self.log.trace("Finished %s %s" % (
|
self.log.trace("Finished %s %s" % (
|
||||||
self.cdist_object.path, self.parameters))
|
self.cdist_object.path, self.parameters))
|
||||||
|
|
||||||
|
@ -420,3 +421,21 @@ class Emulator:
|
||||||
self.log.debug("Recording autorequirement %s for %s",
|
self.log.debug("Recording autorequirement %s for %s",
|
||||||
current_object.name, parent.name)
|
current_object.name, parent.name)
|
||||||
parent.autorequire.append(current_object.name)
|
parent.autorequire.append(current_object.name)
|
||||||
|
|
||||||
|
def record_parent_child_relationships(self):
|
||||||
|
# __object_name is the name of the object whose type manifest is
|
||||||
|
# currently executed
|
||||||
|
__object_name = self.env.get('__object_name', None)
|
||||||
|
if __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
|
||||||
|
if current_object.name not in parent.children:
|
||||||
|
self.log.debug("Recording child %s for %s",
|
||||||
|
current_object.name, parent.name)
|
||||||
|
parent.children.append(current_object.name)
|
||||||
|
if parent.name not in current_object.parents:
|
||||||
|
self.log.debug("Recording parent %s for %s",
|
||||||
|
parent.name, current_object.name)
|
||||||
|
current_object.parents.append(parent.name)
|
||||||
|
|
|
@ -61,6 +61,14 @@ Object cache overview
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~~~~
|
||||||
Each object under :strong:`object` directory has its own structure.
|
Each object under :strong:`object` directory has its own structure.
|
||||||
|
|
||||||
|
autorequire
|
||||||
|
file containing a list of object auto requirements
|
||||||
|
|
||||||
|
children
|
||||||
|
file containing a list of object children, i.e. objects of types that this
|
||||||
|
type reuses (along with 'parents' it is used for maintaining parent-child
|
||||||
|
relationship graph)
|
||||||
|
|
||||||
code-local
|
code-local
|
||||||
code generated from gencode-local, present only if something is
|
code generated from gencode-local, present only if something is
|
||||||
generated
|
generated
|
||||||
|
@ -80,6 +88,15 @@ parameter
|
||||||
directory containing type parameter named files containing parameter
|
directory containing type parameter named files containing parameter
|
||||||
values
|
values
|
||||||
|
|
||||||
|
parents
|
||||||
|
file containing a list of object parents, i.e. objects of types that reuse
|
||||||
|
this type (along with 'children' it is used for maintaining parent-child
|
||||||
|
relationship graph); objects without parents are objects specified in init
|
||||||
|
manifest
|
||||||
|
|
||||||
|
require
|
||||||
|
file containing a list of object requirements
|
||||||
|
|
||||||
source
|
source
|
||||||
this type's source (init manifest)
|
this type's source (init manifest)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue