From 5329c28a1de4ec0662344b78e744a2bd1affac99 Mon Sep 17 00:00:00 2001 From: Richard Maw Date: Wed, 10 Sep 2014 16:03:42 +0000 Subject: Move dependencies and cache keys to Sources --- morphlib/artifact.py | 24 +++--------------------- morphlib/source.py | 21 ++++++++++++++++++++- 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/morphlib/artifact.py b/morphlib/artifact.py index b67f0da0..aea82357 100644 --- a/morphlib/artifact.py +++ b/morphlib/artifact.py @@ -22,10 +22,7 @@ class Artifact(object): * ``source`` -- the source from which the artifact is built * ``name`` -- the name of the artifact - * ``cache_key`` -- a cache key to uniquely identify the artifact - * ``cache_id`` -- a dict describing the components of the cache key - * ``dependencies`` -- list of Artifacts that need to be built beforehand - * ``dependents`` -- list of Artifacts that need this Artifact to be built + * ``dependents`` -- list of Sources that need this Artifact to be built The ``dependencies`` and ``dependents`` lists MUST be modified by the ``add_dependencies`` and ``add_dependent`` methods only. @@ -35,25 +32,10 @@ class Artifact(object): def __init__(self, source, name): self.source = source self.name = name - self.cache_id = None - self.cache_key = None - self.dependencies = [] self.dependents = [] - def add_dependency(self, artifact): - '''Add ``artifact`` to the dependency list.''' - if artifact not in self.dependencies: - self.dependencies.append(artifact) - artifact.dependents.append(self) - - def depends_on(self, artifact): - '''Do we depend on ``artifact``?''' - return artifact in self.dependencies - def basename(self): # pragma: no cover - return '%s.%s.%s' % (self.cache_key, - str(self.source.morphology['kind']), - str(self.name)) + return '%s.%s' % (self.source.basename(), str(self.name)) def metadata_basename(self, metadata_name): # pragma: no cover return '%s.%s' % (self.basename(), metadata_name) @@ -91,7 +73,7 @@ class Artifact(object): def depth_first(a): if a not in done: done.add(a) - for dep in a.dependencies: + for dep in a.source.dependencies: for ret in depth_first(dep): yield ret yield a diff --git a/morphlib/source.py b/morphlib/source.py index 3d7e5a0f..86249452 100644 --- a/morphlib/source.py +++ b/morphlib/source.py @@ -30,8 +30,11 @@ class Source(object): * ``tree`` -- the SHA1 of the tree corresponding to the commit * ``morphology`` -- the in-memory representation of the morphology we use * ``filename`` -- basename of the morphology filename - * ``artifacts`` -- the set of artifacts this source produces. + * ``cache_id`` -- a dict describing the components of the cache key + * ``cache_key`` -- a cache key to uniquely identify the artifact + * ``dependencies`` -- list of Artifacts that need to be built beforehand * ``split_rules`` -- rules for splitting the source's produced artifacts + * ``artifacts`` -- the set of artifacts this source produces. ''' @@ -45,6 +48,9 @@ class Source(object): self.tree = tree self.morphology = morphology self.filename = filename + self.cache_id = None + self.cache_key = None + self.dependencies = [] self.split_rules = split_rules self.artifacts = None @@ -58,6 +64,19 @@ class Source(object): def __repr__(self): # pragma: no cover return 'Source(%s)' % str(self) + def basename(self): # pragma: no cover + return '%s.%s' % (self.cache_key, str(self.morphology['kind'])) + + def add_dependency(self, artifact): # pragma: no cover + if artifact not in self.dependencies: + self.dependencies.append(artifact) + if self not in artifact.dependents: + artifact.dependent_sources.append(self) + + def depends_on(self, artifact): # pragma: no cover + '''Do we depend on ``artifact``?''' + return artifact in self.dependencies + def make_sources(reponame, ref, filename, absref, tree, morphology): kind = morphology['kind'] -- cgit v1.2.1