summaryrefslogtreecommitdiff
path: root/morphlib/artifactresolver.py
diff options
context:
space:
mode:
authorRichard Maw <richard.maw@codethink.co.uk>2012-07-03 16:40:45 +0000
committerRichard Maw <richard.maw@codethink.co.uk>2012-07-03 16:40:45 +0000
commit1eff90528732e9c6ffbad03ca30adecbf11f87f7 (patch)
tree22a3f015ad5c1945dd001cdf632847ee5e6d0872 /morphlib/artifactresolver.py
parent3e31c8211d5ec1f642917d7609ed77fc54cf0a0b (diff)
downloadmorph-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.py38
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):