summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTristan Van Berkom <tristan.vanberkom@codethink.co.uk>2017-02-28 14:01:49 +0900
committerJavier Jardón <jjardon@gnome.org>2017-05-11 08:24:26 +0000
commitae66c4763ff9eb6acf285794ecd728693e762035 (patch)
treebae514608c57cbd6364512de940aada3e2362cf2
parenteee0d563b6542a8923b9dc83f314272c079b5525 (diff)
downloadybd-ae66c4763ff9eb6acf285794ecd728693e762035.tar.gz
rpm.py: Support a whitelist of chunks for which to generate rpms
-rw-r--r--ybd/rpm.py20
1 files changed, 13 insertions, 7 deletions
diff --git a/ybd/rpm.py b/ybd/rpm.py
index e35ab22..98ded02 100644
--- a/ybd/rpm.py
+++ b/ybd/rpm.py
@@ -33,7 +33,9 @@ common_rpm_args = (
# in the target @dn in order of dependency, the passed
# @dn definition will be the last one called.
#
-def foreach_def(dn, callback, user_data, traversed={}):
+def foreach_def(dn, callback, user_data, traversed=None, whitelist=None):
+ if traversed is None:
+ traversed = {}
if type(dn) is not dict:
dn = app.defs.get(dn)
@@ -54,8 +56,8 @@ def foreach_def(dn, callback, user_data, traversed={}):
for system in systems:
for s in system.get('subsystems', []):
subsystem = app.defs.get(s['path'])
- foreach_def(subsystem, callback, user_data, traversed)
- foreach_def(system['path'], callback, user_data, traversed)
+ foreach_def(subsystem, callback, user_data, traversed, whitelist)
+ foreach_def(system['path'], callback, user_data, traversed, whitelist)
contents = dn.get('contents', [])
for it in contents:
@@ -67,9 +69,11 @@ def foreach_def(dn, callback, user_data, traversed={}):
if item.get('build-mode', 'staging') != 'bootstrap':
if not traversed.get(item.get('name')):
- foreach_def(item, callback, user_data, traversed)
+ foreach_def(item, callback, user_data, traversed, whitelist)
+
+ if whitelist is None or dn.get('name') in whitelist:
+ callback(dn, user_data)
- callback(dn, user_data)
traversed[dn.get('name')] = True
@@ -210,6 +214,7 @@ def package_one_rpm(dn, userdata):
# package_rpms
# @system: The system to package rpms for
# @time: The number of whole seconds since the epoch
+# @whitelist: A whitelist of chunk names to package rpms for
#
# This function will first stage the given @system, which
# must have an rpm installation, and then it will use the
@@ -225,7 +230,7 @@ def package_one_rpm(dn, userdata):
# as the @time argument because package_rpms might be called for
# multiple systems, if a cluster was specified on the command-line.
#
-def package_rpms(system, time):
+def package_rpms(system, time, whitelist=None):
if type(system) is not dict:
system = app.defs.get(system)
@@ -249,7 +254,8 @@ def package_rpms(system, time):
sandbox.run_sandboxed(system, command, env_vars)
# Package each rpm in order of build dependency
- foreach_def(system, package_one_rpm, {'system': system, 'time': time})
+ foreach_def(system, package_one_rpm, {'system': system, 'time': time},
+ whitelist=whitelist)
# Move the resulting RPMS directory into the deployment area
rpm_destdir = os.path.join(app.config['deployment'], 'RPMs',