summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-12 18:10:58 +0100
committerJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-04-12 18:16:20 +0100
commitbda8c93aa4559cbecfd9d066a44fec71df06ef0c (patch)
treefebfc8712b0b9554323dad5418565f44b9677aa2 /morphlib
parent46a9f8f336eaecf5283e31b41acdea72e337bcd9 (diff)
downloadmorph-bda8c93aa4559cbecfd9d066a44fec71df06ef0c.tar.gz
Gracefully handle dependencies of chunks on themselves.
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/dependencyresolver.py4
-rw-r--r--morphlib/dependencyresolver_tests.py60
2 files changed, 64 insertions, 0 deletions
diff --git a/morphlib/dependencyresolver.py b/morphlib/dependencyresolver.py
index eea77b5e..0bf18ded 100644
--- a/morphlib/dependencyresolver.py
+++ b/morphlib/dependencyresolver.py
@@ -109,12 +109,16 @@ class DependencyResolver(object):
if build_depends is None:
for earlier_chunk in processed_chunks:
+ if earlier_chunk is chunk:
+ continue
if earlier_chunk.depends_on(chunk):
raise MutualDependencyError(chunk, earlier_chunk)
chunk.add_dependency(earlier_chunk)
elif isinstance(build_depends, list):
for name in build_depends:
other_chunk = name_to_processed_chunk.get(name, None)
+ if other_chunk is chunk:
+ continue
if other_chunk:
chunk.add_dependency(other_chunk)
else:
diff --git a/morphlib/dependencyresolver_tests.py b/morphlib/dependencyresolver_tests.py
index 324d032e..c2d95cd1 100644
--- a/morphlib/dependencyresolver_tests.py
+++ b/morphlib/dependencyresolver_tests.py
@@ -539,6 +539,66 @@ class DependencyResolverTests(unittest.TestCase):
self.assertRaises(morphlib.dependencyresolver.MutualDependencyError,
self.resolver.resolve_dependencies, pool)
+ def test_graceful_handling_of_self_dependencies_of_chunks(self):
+ pool = morphlib.sourcepool.SourcePool()
+
+ morph = morphlib.morph2.Morphology(
+ '''
+ {
+ "name": "stratum1",
+ "kind": "stratum",
+ "sources": [
+ {
+ "name": "chunk-runtime",
+ "repo": "repo",
+ "morph": "chunk",
+ "ref": "original/ref"
+ },
+ {
+ "name": "chunk-devel",
+ "repo": "repo",
+ "morph": "chunk",
+ "ref": "original/ref"
+ },
+ {
+ "name": "chunk-doc",
+ "repo": "repo",
+ "morph": "chunk",
+ "ref": "original/ref",
+ "build-depends": [
+ "chunk-runtime"
+ ]
+ }
+ ]
+ }
+ ''')
+ stratum = morphlib.source.Source(
+ 'repo', 'original/ref', 'sha1', morph, 'stratum.morph')
+ pool.add(stratum)
+
+ morph = morphlib.morph2.Morphology(
+ '''
+ {
+ "name": "chunk",
+ "kind": "chunk",
+ "artifacts": {
+ "chunk-runtime": [ "usr/lib" ],
+ "chunk-devel": [ "usr/include" ],
+ "chunk-doc": [ "usr/share/doc" ]
+ }
+ }
+ ''')
+ chunk = morphlib.source.Source(
+ 'repo', 'original/ref', 'sha1', morph, 'chunk.morph')
+ pool.add(chunk)
+
+ self.resolver.resolve_dependencies(pool)
+
+ self.assertEqual(chunk.dependencies, [])
+ self.assertEqual(chunk.dependents, [stratum])
+ self.assertEqual(stratum.dependencies, [chunk])
+ self.assertEqual(stratum.dependents, [])
+
def test_detection_of_mutual_dependency_between_consecutive_chunks(self):
pool = morphlib.sourcepool.SourcePool()