diff options
author | Ben Brown <ben.brown@codethink.co.uk> | 2018-02-20 17:16:21 +0000 |
---|---|---|
committer | Ben Brown <ben.brown@codethink.co.uk> | 2018-02-23 15:49:01 +0000 |
commit | 1210d90a077d44f80497699fc976de526ad8313a (patch) | |
tree | ad4b4d1f1117b3eea85fe5c67b76019d2a5bd1f1 | |
parent | 5b4fd1a0afb4e60e2af65fe8ce75d5312825fa42 (diff) | |
download | ybd-benbrown/rpm-baserock-dir.tar.gz |
Allow the baserock directory to be used for rpm related filesbenbrown/rpm-baserock-dir
Allows rpm specific files to be hidden away in the baserock directory
during rpm generation.
-rw-r--r-- | ybd/rpm.py | 23 |
1 files changed, 19 insertions, 4 deletions
@@ -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) |