From 1210d90a077d44f80497699fc976de526ad8313a Mon Sep 17 00:00:00 2001 From: Ben Brown Date: Tue, 20 Feb 2018 17:16:21 +0000 Subject: Allow the baserock directory to be used for rpm related files Allows rpm specific files to be hidden away in the baserock directory during rpm generation. --- ybd/rpm.py | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ybd/rpm.py b/ybd/rpm.py index 3bc751f..727e270 100644 --- a/ybd/rpm.py +++ b/ybd/rpm.py @@ -255,13 +255,23 @@ def extract_defines(dn): return ''.join(strings) +def sanitise_rpm_filepath(rpm_filepath): + return re.sub(r'^/?baserock/', '', rpm_filepath) + + def extract_metafiles(system, dn, instdir, metadir): packages = dn['rpm-metadata'].get('packages', []) for package in packages: metafile = package.get('metafile', '').lstrip(os.sep) metafile = expand_macro(system, dn, metafile) if metafile: - shutil.move(os.path.join(instdir, metafile), metadir) + try: + shutil.move(os.path.join(instdir, metafile), metadir) + except IOError: + filepath = sanitise_rpm_filepath(metafile) + if not os.path.exists(os.path.join(metadir, filepath)): + log(dn, 'ERROR: Failed to extract metafile:', metafile) + sys.exit(1) def extract_manifests(system, dn, instdir, metadir): @@ -275,7 +285,8 @@ def extract_manifests(system, dn, instdir, metadir): try: shutil.move(os.path.join(instdir, manifest), metadir) except IOError: - if not os.path.exists(os.path.join(metadir, manifest)): + filepath = sanitise_rpm_filepath(manifest) + if not os.path.exists(os.path.join(metadir, filepath)): log(dn, 'WARNING: Failed to extract manifest:', manifest) @@ -356,11 +367,15 @@ def stage_prebuilts(dn, system): for package in dn['rpm-metadata']['packages']: if 'path' not in package: continue + path = package['path'].lstrip(os.sep) basedir = os.path.join(system['sandbox'], '%s.inst' % dn['name']) cache_path = os.path.join( system['sandbox'], 'RPMS', '%s.rpm' % package['name']) - rpm_glob = sorted(glob( - os.path.join(basedir, package['path'].lstrip('/')))) + rpm_glob = sorted(glob(os.path.join(basedir, path))) + if not rpm_glob: + metadir = os.path.join(system['sandbox'], '%s.meta' % dn['name']) + rpm_glob = sorted(glob(os.path.join( + metadir, sanitise_rpm_filepath(path)))) if not rpm_glob: log(dn, 'Failed to find prebuilt rpm matching', package['path']) sys.exit(1) -- cgit v1.2.1