summaryrefslogtreecommitdiff
path: root/morphlib
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-08-07 11:55:25 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-08-07 13:41:40 +0100
commit66291811c81ed21f5005ba35e68898c73edd88bd (patch)
treea2aefc7e7cb36a73d4c76da349796c3402bbcc20 /morphlib
parent6c0e0fb41df901771be8074d1e2603ceb26a3926 (diff)
downloadmorph-66291811c81ed21f5005ba35e68898c73edd88bd.tar.gz
morphologyfactory: refactor chunk bdeps exceptions
This creates a small exception hierarchy for failures to validate stratum morphologies. This is currently a line rather than a tree, but it will be expanded later in the patch series. This also adds test coverage for chunk build dependencies being omitted.
Diffstat (limited to 'morphlib')
-rw-r--r--morphlib/morphologyfactory.py19
-rw-r--r--morphlib/morphologyfactory_tests.py17
2 files changed, 30 insertions, 6 deletions
diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py
index d0d9ea04..394d186a 100644
--- a/morphlib/morphologyfactory.py
+++ b/morphlib/morphologyfactory.py
@@ -36,6 +36,17 @@ class NotcachedError(MorphologyFactoryError):
"remote cache specified" % repo_name)
+class StratumError(MorphologyFactoryError):
+ pass
+
+
+class NoChunkBuildDependsError(StratumError):
+ def __init__(self, stratum, chunk):
+ StratumError.__init__(
+ self, 'No build dependencies in stratum %s for chunk %s '
+ '(build-depends is a mandatory field)' % (stratum, chunk))
+
+
class MorphologyFactory(object):
'''An way of creating morphologies which will provide a default'''
@@ -136,14 +147,10 @@ class MorphologyFactory(object):
def _check_and_tweak_stratum(self, morphology, reponame, sha1, filename):
'''Check and tweak a stratum morphology.'''
- for source in morphology['chunks']: # pragma: no cover
+ for source in morphology['chunks']:
if source.get('build-depends', None) is None:
name = source.get('name', source.get('repo', 'unknown'))
- raise morphlib.Error('No build dependencies '
- 'stratum %s for chunk %s '
- '(build-depends is a mandatory '
- 'field)' %
- (filename, name))
+ raise NoChunkBuildDependsError(filename, name)
morphology.builds_artifacts = [morphology['name']]
morphology.needs_artifact_metadata_cached = True
diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py
index b1a6a621..7a3dc343 100644
--- a/morphlib/morphologyfactory_tests.py
+++ b/morphlib/morphologyfactory_tests.py
@@ -59,6 +59,18 @@ class FakeLocalRepo(object):
"name": "stratum",
"kind": "stratum"
}''',
+ 'stratum-no-chunk-bdeps.morph': '''{
+ "name": "stratum-no-chunk-bdeps",
+ "kind": "stratum",
+ "chunks": [
+ {
+ "name": "chunk",
+ "repo": "test:repo",
+ "ref": "sha1",
+ "build-mode": "bootstrap"
+ }
+ ]
+ }''',
'system.morph': '''{
"name": "system",
"kind": "system",
@@ -261,3 +273,8 @@ class MorphologyFactoryTests(unittest.TestCase):
self.assertRaises(morphlib.Error, self.mf.get_morphology,
'reponame', 'sha1', 'parse-error.morph')
+ def test_fails_on_no_chunk_bdeps(self):
+ self.assertRaises(morphlib.morphologyfactory.NoChunkBuildDependsError,
+ self.mf.get_morphology, 'reponame', 'sha1',
+ 'stratum-no-chunk-bdeps.morph')
+