summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@gmail.com>2014-09-10 16:03:42 +0000
committerRichard Maw <richard.maw@gmail.com>2014-09-19 12:43:26 +0000
commit5329c28a1de4ec0662344b78e744a2bd1affac99 (patch)
treeeeb8f01047b37cd244d3b922a71de1e87fc52391
parent56ea3690df433ec1224676ca08170ee6c638649d (diff)
downloadmorph-5329c28a1de4ec0662344b78e744a2bd1affac99.tar.gz
Move dependencies and cache keys to Sources
-rw-r--r--morphlib/artifact.py24
-rw-r--r--morphlib/source.py21
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']