summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSam Thursfield <sam.thursfield@codethink.co.uk>2015-07-28 17:18:07 +0000
committerBaserock Gerrit <gerrit@baserock.org>2015-08-11 14:35:14 +0000
commit2cf830f7df706cab0042481e772b1bd6f4f8ab8a (patch)
treee8e98c05947abe25eb7aeb0fca916de0492a2cc9
parentc8b6110ec34565dd81413dd7498589c36551b3ec (diff)
downloadmorph-2cf830f7df706cab0042481e772b1bd6f4f8ab8a.tar.gz
Fix crash if artifact doesn't contain a /baserock directory
This is probably a sign that something is broken, but it's better to cope with it rather than crashing. Change-Id: I4e9c40d0b7db031ea271143938db61c4ad70a888
-rw-r--r--morphlib/builder.py12
1 files changed, 8 insertions, 4 deletions
diff --git a/morphlib/builder.py b/morphlib/builder.py
index 06b4198b..4f6f2194 100644
--- a/morphlib/builder.py
+++ b/morphlib/builder.py
@@ -608,11 +608,15 @@ class SystemBuilder(BuilderBase): # pragma: no cover
with cache.get(chunk) as chunk_file:
morphlib.bins.unpack_binary_from_file(chunk_file, target)
+ target_metadata_dir = os.path.join(target, 'baserock')
+ if not os.path.exists(target_metadata_dir):
+ os.mkdir(target_metadata_dir)
+
target_metadata = os.path.join(
- target, 'baserock', '%s.meta' % stratum_artifact.name)
- with cache.get_artifact_metadata(stratum_artifact, 'meta') as meta_src:
- with morphlib.savefile.SaveFile(target_metadata, 'w') as meta_dst:
- shutil.copyfileobj(meta_src, meta_dst)
+ target_metadata_dir, '%s.meta' % stratum_artifact.name)
+ with cache.get_artifact_metadata(stratum_artifact, 'meta') as src_meta:
+ with morphlib.savefile.SaveFile(target_metadata, 'w') as dst_meta:
+ shutil.copyfileobj(src_meta, dst_meta)
def unpack_strata(self, path):
'''Unpack strata into a directory.'''