diff options
author | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2012-04-12 18:10:58 +0100 |
---|---|---|
committer | Jannis Pohlmann <jannis.pohlmann@codethink.co.uk> | 2012-04-12 18:16:20 +0100 |
commit | bda8c93aa4559cbecfd9d066a44fec71df06ef0c (patch) | |
tree | febfc8712b0b9554323dad5418565f44b9677aa2 /morphlib | |
parent | 46a9f8f336eaecf5283e31b41acdea72e337bcd9 (diff) | |
download | morph-bda8c93aa4559cbecfd9d066a44fec71df06ef0c.tar.gz |
Gracefully handle dependencies of chunks on themselves.
Diffstat (limited to 'morphlib')
-rw-r--r-- | morphlib/dependencyresolver.py | 4 | ||||
-rw-r--r-- | morphlib/dependencyresolver_tests.py | 60 |
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() |