-
Lorenz Hüdepohl authoredLorenz Hüdepohl authored
mpcdf_setup_software_project.py 3.21 KiB
from __future__ import print_function
import osc
import osc.conf
import osc.core
import osc.cmdln
import mpcdf_common
@osc.cmdln.option('-n', '--dry-run', action="store_true",
help="Do not actually run anything but output the resulting XML configuration")
@osc.cmdln.option('-i', '--ignore-repo', action="append", default=[], metavar="REPO",
help="Do not enable for repository REPO")
@osc.cmdln.alias("mpcdf_setup_software")
def do_mpcdf_setup_software_project(self, subcmd, opts, *args):
"""${cmd_name}: Set-up the 'software' project
This creates the 'prjconf' for the 'software' project and
enables the repositories for packages set to build for
'system'
Usage:
osc ${cmd_name}
${cmd_option_list}
"""
if len(args) != 0:
raise osc.oscerr.WrongArgs("Too many arguments")
api_url = self.get_api_url()
prjconf = list(map(mpcdf_common.decode_it, osc.core.show_project_conf(api_url, "software")))
start_marker = "# Autogenerated by osc mpcdf_setup_software_project, do not edit till end of section\n"
end_marker = "# End of autogenerated section\n"
try:
start = prjconf.index(start_marker)
end = prjconf.index(end_marker)
except ValueError:
start = None
end = len(prjconf)
prjconf_head = "".join(prjconf[:start])
prjconf_tail = "".join(prjconf[end + 1:])
prjconf = [start_marker]
prjconf.append("Constraint: sandbox lxc")
prjconf.append("Constraint: hostlabel sandybridge")
prjconf.append("")
prjconf.append(r"PublishFilter: ^.*\.src\.rpm$")
prjconf.append("")
prjconf.append("Preinstall: mpcdf")
prjconf.append("Runscripts: mpcdf")
prjconf.append("Preinstall: mpcdf_modules")
prjconf.append("Preinstall: brp_mpcdf_modules")
prjconf.append("")
prjconf.append("Macros:")
prjconf.append("%have_mpcdf_compiler 0")
prjconf.append("%have_mpcdf_mpi 0")
prjconf.append("%have_mpcdf_cuda 0")
prjconf.append(":Macros")
software_meta = mpcdf_common.project_meta(api_url, "software")
distributions = sorted(repo.get("name") for repo in software_meta.findall('./repository'))
for distribution in distributions:
extra_tags = mpcdf_common.dist_prjconf_tags(distribution)
extra_macros = mpcdf_common.dist_prjconf_macros(distribution)
if len(extra_tags) > 0 or len(extra_macros) > 0:
prjconf.append("")
prjconf.append("%if \"%_repository\" == \"{0}\"".format(distribution))
prjconf.append(extra_tags)
prjconf.append("")
prjconf.append("Macros:")
prjconf.append(extra_macros)
prjconf.append(":Macros")
prjconf.append("%endif")
prjconf.append(end_marker)
prjconf = prjconf_head + "\n".join(prjconf) + prjconf_tail
if opts.dry_run:
print("osc meta prjconf software -F - <<EOF\n{0}\nEOF\n".format(prjconf))
else:
osc.core.edit_meta("prjconf", "software", data=prjconf, apiurl=api_url)
if opts.ignore_repo:
ignore_repos = opts.ignore_repo
else:
ignore_repos = ()
mpcdf_common.mpcdf_enable_repositories_for_all_packages(api_url, "software", ignore_repos=ignore_repos)