summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2013-08-07 12:00:49 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2013-08-07 13:41:40 +0100
commit40be81b74d63e1ba7bd3e10a78c79d3829673172 (patch)
tree1c88237b7431c734ec515df2067ad15e06327c80
parent66291811c81ed21f5005ba35e68898c73edd88bd (diff)
downloadmorph-40be81b74d63e1ba7bd3e10a78c79d3829673172.tar.gz
morphologyfactory: move empty stratum check here
It is better to test whether a straum is empty here, since it will be noticed earlier in the build, as soon as the morphologies are loaded, rather than after they have all been parsed. It is also conceptually nicer to put it here, since the morphologyfactory was written to perform this kind of validation. On a more practical note, the validation is moved here so that the test for this error isn't masked by the test for no build dependencies. To ensure tests still pass, we alter the stratum morphology used by other unit tests to no longer be empty, and add an empty one to test.
-rw-r--r--morphlib/builder2.py9
-rw-r--r--morphlib/morphologyfactory.py10
-rw-r--r--morphlib/morphologyfactory_tests.py19
3 files changed, 28 insertions, 10 deletions
diff --git a/morphlib/builder2.py b/morphlib/builder2.py
index daf50b56..e1eaaa86 100644
--- a/morphlib/builder2.py
+++ b/morphlib/builder2.py
@@ -469,8 +469,6 @@ class StratumBuilder(BuilderBase):
with self.build_watch('overall-build'):
constituents = [d for d in self.artifact.dependencies
if self.is_constituent(d)]
- if len(constituents) == 0:
- raise EmptyStratumError(self.artifact.name)
# the only reason the StratumBuilder has to download chunks is to
# check for overlap now that strata are lists of chunks
@@ -707,10 +705,3 @@ class Builder(object): # pragma: no cover
built_artifacts = o.build_and_cache()
logging.debug('Builder.build: done')
return built_artifacts
-
-
-class EmptyStratumError(cliapp.AppException):
-
- def __init__(self, stratum_name): # pragma: no cover
- cliapp.AppException.__init__(self,
- "Stratum %s is empty (has no dependencies)" % stratum_name)
diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py
index 394d186a..fa71e820 100644
--- a/morphlib/morphologyfactory.py
+++ b/morphlib/morphologyfactory.py
@@ -47,6 +47,13 @@ class NoChunkBuildDependsError(StratumError):
'(build-depends is a mandatory field)' % (stratum, chunk))
+class EmptyStratumError(StratumError):
+
+ def __init__(self, stratum):
+ cliapp.AppException.__init__(self,
+ "Stratum %s is empty (has no dependencies)" % stratum)
+
+
class MorphologyFactory(object):
'''An way of creating morphologies which will provide a default'''
@@ -147,6 +154,9 @@ class MorphologyFactory(object):
def _check_and_tweak_stratum(self, morphology, reponame, sha1, filename):
'''Check and tweak a stratum morphology.'''
+ if len(morphology['chunks']) == 0:
+ raise EmptyStratumError(morphology['name'])
+
for source in morphology['chunks']:
if source.get('build-depends', None) is None:
name = source.get('name', source.get('repo', 'unknown'))
diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py
index 7a3dc343..de1be017 100644
--- a/morphlib/morphologyfactory_tests.py
+++ b/morphlib/morphologyfactory_tests.py
@@ -57,7 +57,15 @@ class FakeLocalRepo(object):
}''',
'stratum.morph': '''{
"name": "stratum",
- "kind": "stratum"
+ "kind": "stratum",
+ "chunks": [
+ {
+ "name": "chunk",
+ "repo": "test:repo",
+ "ref": "sha1",
+ "build-depends": []
+ }
+ ]
}''',
'stratum-no-chunk-bdeps.morph': '''{
"name": "stratum-no-chunk-bdeps",
@@ -71,6 +79,10 @@ class FakeLocalRepo(object):
}
]
}''',
+ 'stratum-empty.morph': '''{
+ "name": "stratum-empty",
+ "kind": "stratum"
+ }''',
'system.morph': '''{
"name": "system",
"kind": "system",
@@ -278,3 +290,8 @@ class MorphologyFactoryTests(unittest.TestCase):
self.mf.get_morphology, 'reponame', 'sha1',
'stratum-no-chunk-bdeps.morph')
+ def test_fails_on_empty_stratum(self):
+ self.assertRaises(
+ morphlib.morphologyfactory.EmptyStratumError,
+ self.mf.get_morphology, 'reponame', 'sha1', 'stratum-empty.morph')
+