From 2cf830f7df706cab0042481e772b1bd6f4f8ab8a Mon Sep 17 00:00:00 2001 From: Sam Thursfield Date: Tue, 28 Jul 2015 17:18:07 +0000 Subject: 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 --- morphlib/builder.py | 12 ++++++++---- 1 file 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.''' -- cgit v1.2.1