summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Brown <ben.brown@codethink.co.uk>2018-02-20 17:16:21 +0000
committerBen Brown <ben.brown@codethink.co.uk>2018-02-23 15:49:01 +0000
commit1210d90a077d44f80497699fc976de526ad8313a (patch)
treead4b4d1f1117b3eea85fe5c67b76019d2a5bd1f1
parent5b4fd1a0afb4e60e2af65fe8ce75d5312825fa42 (diff)
downloadybd-1210d90a077d44f80497699fc976de526ad8313a.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.py23
1 files 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)