diff options
-rw-r--r-- | morphlib/morphologyfactory.py | 76 | ||||
-rw-r--r-- | morphlib/morphologyfactory_tests.py | 165 |
2 files changed, 75 insertions, 166 deletions
diff --git a/morphlib/morphologyfactory.py b/morphlib/morphologyfactory.py index cd1972be..fd78c94f 100644 --- a/morphlib/morphologyfactory.py +++ b/morphlib/morphologyfactory.py @@ -37,31 +37,6 @@ 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 EmptyStratumError(StratumError): - - def __init__(self, stratum): - cliapp.AppException.__init__(self, - "Stratum %s is empty (has no dependencies)" % stratum) - - -class NoStratumBuildDependsError(StratumError): - def __init__(self, stratum): - StratumError.__init__( - self, 'Stratum %s has no build-dependencies listed ' - 'and has no bootstrap chunks.' % stratum) - - class MorphologyFactory(object): '''A way of creating morphologies which will provide a default''' @@ -112,16 +87,8 @@ class MorphologyFactory(object): def get_morphology(self, reponame, sha1, filename): morph_name, text = self._get_morphology_text(reponame, sha1, filename) - try: - morphology = morphlib.morph2.Morphology(text) - except morphlib.YAMLError as e: # pragma: no cover - raise morphlib.Error("Error parsing %s: %s" % - (filename, str(e))) - - if morph_name != morphology['name']: - raise morphlib.Error( - "Name %s does not match basename of morphology file %s" % - (morphology['name'], filename)) + loader = morphlib.morphloader.MorphologyLoader() + morphology = loader.load_from_string(text) method_name = '_check_and_tweak_%s' % morphology['kind'] if hasattr(self, method_name): @@ -133,54 +100,17 @@ class MorphologyFactory(object): def _check_and_tweak_system(self, morphology, reponame, sha1, filename): '''Check and tweak a system morphology.''' - if morphology['arch'] is None: # pragma: no cover - raise morphlib.Error('No arch specified in system %s ' - '(arch is a mandatory field)' % - filename) - - if morphology['arch'] == 'armv7': - morphology._dict['arch'] = 'armv7l' - - if morphology['arch'] not in morphlib.valid_archs: - raise morphlib.Error('Unknown arch %s. This version of Morph ' - 'supports the following architectures: %s' % - (morphology['arch'], - ', '.join(morphlib.valid_archs))) - name = morphology['name'] morphology.builds_artifacts = [name + '-rootfs'] morphology.needs_artifact_metadata_cached = False - morphlib.morphloader.MorphologyLoader._validate_stratum_specs_fields( - morphology, 'strata') - morphlib.morphloader.MorphologyLoader._set_stratum_specs_defaults( - morphology, 'strata') - 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')) - raise NoChunkBuildDependsError(filename, name) - - if (len(morphology['build-depends'] or []) == 0 and - not any(c.get('build-mode') in ('bootstrap', 'test') - for c in morphology['chunks'])): - raise NoStratumBuildDependsError(filename) - morphology.builds_artifacts = [morphology['name']] morphology.needs_artifact_metadata_cached = True - morphlib.morphloader.MorphologyLoader._validate_stratum_specs_fields( - morphology, 'build-depends') - morphlib.morphloader.MorphologyLoader._set_stratum_specs_defaults( - morphology, 'build-depends') - def _check_and_tweak_chunk(self, morphology, reponame, sha1, filename): '''Check and tweak a chunk morphology.''' @@ -191,5 +121,3 @@ class MorphologyFactory(object): morphology.builds_artifacts = [morphology['name']] morphology.needs_artifact_metadata_cached = False - - morphlib.morphloader.MorphologyLoader._validate_chunk(morphology) diff --git a/morphlib/morphologyfactory_tests.py b/morphlib/morphologyfactory_tests.py index 47bf3153..347d93f7 100644 --- a/morphlib/morphologyfactory_tests.py +++ b/morphlib/morphologyfactory_tests.py @@ -17,7 +17,6 @@ import unittest import morphlib -from morphlib.morph2 import Morphology from morphlib.morphologyfactory import (MorphologyFactory, MorphologyNotFoundError, NotcachedError) @@ -41,94 +40,76 @@ class FakeRemoteRepoCache(object): class FakeLocalRepo(object): morphologies = { - 'chunk.morph': '''{ - "name": "chunk", - "kind": "chunk", - "build-system": "bar" - }''', - 'chunk-split.morph': '''{ - "name": "chunk-split", - "kind": "chunk", - "build-system": "bar", - "products": [ - { - "artifact": "chunk-split-runtime", - "include": [] - }, - { - "artifact": "chunk-split-devel", - "include": [] - } - ] - }''', - 'stratum.morph': '''{ - "name": "stratum", - "kind": "stratum", - "chunks": [ - { - "name": "chunk", - "repo": "test:repo", - "ref": "sha1", - "build-mode": "bootstrap", - "build-depends": [] - } - ] - }''', - 'stratum-no-chunk-bdeps.morph': '''{ - "name": "stratum-no-chunk-bdeps", - "kind": "stratum", - "chunks": [ - { - "name": "chunk", - "repo": "test:repo", - "ref": "sha1", - "build-mode": "bootstrap" - } - ] - }''', - 'stratum-no-bdeps-no-bootstrap.morph': '''{ - "name": "stratum-no-bdeps-no-bootstrap", - "kind": "stratum", - "chunks": [ - { - "name": "chunk", - "repo": "test:repo", - "ref": "sha1", - "build-depends": [] - } - ] - }''', - 'stratum-bdeps-no-bootstrap.morph': '''{ - "name": "stratum-bdeps-no-bootstrap", - "kind": "stratum", - "build-depends": [ - { - "morph": "stratum" - } - ], - "chunks": [ - { - "name": "chunk", - "repo": "test:repo", - "ref": "sha1", - "build-depends": [] - } - ] - }''', - 'stratum-empty.morph': '''{ - "name": "stratum-empty", - "kind": "stratum" - }''', - 'system.morph': '''{ - "name": "system", - "kind": "system", - "arch": "%(arch)s" - }''', - 'parse-error.morph': '''{ "name"''', - 'name-mismatch.morph': '''{ - "name": "fred", - "kind": "stratum" - }''', + 'chunk.morph': ''' + name: chunk + kind: chunk + build-system: bar + ''', + 'chunk-split.morph': ''' + name: chunk-split + kind: chunk + build-system: bar + products: + - artifact: chunk-split-runtime + include: [] + - artifact: chunk-split-devel + include: [] + ''', + 'stratum.morph': ''' + name: stratum + kind: stratum + chunks: + - name: chunk + repo: test:repo + ref: sha1 + build-mode: bootstrap + build-depends: [] + ''', + 'stratum-no-chunk-bdeps.morph': ''' + name: stratum-no-chunk-bdeps + kind: stratum + chunks: + - name: chunk + repo: test:repo + ref: sha1 + build-mode: bootstrap + ''', + 'stratum-no-bdeps-no-bootstrap.morph': ''' + name: stratum-no-bdeps-no-bootstrap + kind: stratum + chunks: + - name: chunk + repo: test:repo + ref: sha1 + build-depends: [] + ''', + 'stratum-bdeps-no-bootstrap.morph': ''' + name: stratum-bdeps-no-bootstrap + kind: stratum + build-depends: + - morph: stratum + chunks: + - name: chunk + repo: test:repo + ref: sha1 + build-depends: [] + ''', + 'stratum-empty.morph': ''' + name: stratum-empty + kind: stratum + ''', + 'system.morph': ''' + name: system + kind: system + arch: %(arch)s + strata: + - morph: stratum + ''', + 'parse-error.morph': ''' name''', + 'name-mismatch.morph': ''' + name: fred + kind: stratum + ''', } def __init__(self): @@ -313,13 +294,13 @@ class MorphologyFactoryTests(unittest.TestCase): 'reponame', 'sha1', 'parse-error.morph') def test_fails_on_no_chunk_bdeps(self): - self.assertRaises(morphlib.morphologyfactory.NoChunkBuildDependsError, + self.assertRaises(morphlib.morphloader.NoBuildDependenciesError, self.mf.get_morphology, 'reponame', 'sha1', 'stratum-no-chunk-bdeps.morph') def test_fails_on_no_bdeps_or_bootstrap(self): self.assertRaises( - morphlib.morphologyfactory.NoStratumBuildDependsError, + morphlib.morphloader.NoStratumBuildDependenciesError, self.mf.get_morphology, 'reponame', 'sha1', 'stratum-no-bdeps-no-bootstrap.morph') @@ -330,6 +311,6 @@ class MorphologyFactoryTests(unittest.TestCase): def test_fails_on_empty_stratum(self): self.assertRaises( - morphlib.morphologyfactory.EmptyStratumError, + morphlib.morphloader.EmptyStratumError, self.mf.get_morphology, 'reponame', 'sha1', 'stratum-empty.morph') |