diff options
author | Richard Maw <richard.maw@codethink.co.uk> | 2012-07-03 16:40:45 +0000 |
---|---|---|
committer | Richard Maw <richard.maw@codethink.co.uk> | 2012-07-03 16:40:45 +0000 |
commit | 1eff90528732e9c6ffbad03ca30adecbf11f87f7 (patch) | |
tree | 22a3f015ad5c1945dd001cdf632847ee5e6d0872 /morphlib/artifactresolver.py | |
parent | 3e31c8211d5ec1f642917d7609ed77fc54cf0a0b (diff) | |
download | morph-1eff90528732e9c6ffbad03ca30adecbf11f87f7.tar.gz |
ArtifactResolver: systems define multiple artifacts
Instead of a System source producing one System artifact, it can
produce multiple System artifacts, dependent on if it is an ARM System.
Diffstat (limited to 'morphlib/artifactresolver.py')
-rw-r--r-- | morphlib/artifactresolver.py | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/morphlib/artifactresolver.py b/morphlib/artifactresolver.py index a458f52a..9a589adf 100644 --- a/morphlib/artifactresolver.py +++ b/morphlib/artifactresolver.py @@ -93,15 +93,20 @@ class ArtifactResolver(object): source = queue.popleft() if source.morphology['kind'] == 'system': - artifact = self._get_artifact( - source, source.morphology['name']) - - if not artifact in self._added_artifacts: - artifacts.append(artifact) - self._added_artifacts.add(artifact) + if source.morphology['arch'] == 'arm': + systems = [self._get_artifact( + source, source.morphology['name'] + name) + for name in ('-rootfs', '-kernel')] + else: + systems = [self._get_artifact( + source, source.morphology['name']+'-rootfs')] + + if any(a not in self._added_artifacts for a in systems): + artifacts.extend(systems) + self._added_artifacts.update(systems) resolved_artifacts = self._resolve_system_dependencies( - artifact, queue) + systems, source, queue) for artifact in resolved_artifacts: if not artifact in self._added_artifacts: @@ -149,22 +154,23 @@ class ArtifactResolver(object): self._cached_artifacts[info] = artifact return artifact - def _resolve_system_dependencies(self, system, queue): + def _resolve_system_dependencies(self, systems, source, queue): artifacts = [] - for stratum_name in system.source.morphology['strata']: - source = self._source_pool.lookup( - system.source.repo_name, - system.source.original_ref, + for stratum_name in source.morphology['strata']: + stratum_source = self._source_pool.lookup( + source.repo_name, + source.original_ref, '%s.morph' % stratum_name) - stratum = self._get_artifact(source, stratum_name) + stratum = self._get_artifact(stratum_source, stratum_name) - system.add_dependency(stratum) - queue.append(source) + for system in systems: + system.add_dependency(stratum) + queue.append(stratum_source) artifacts.append(stratum) - + return artifacts def _resolve_stratum_dependencies(self, stratum, queue): |