diff --git a/mpcdf_common.py b/mpcdf_common.py index 840c2f125826b0ef548704bb11866e65f83e07d2..958f178a5f85847cb7c93a8d563408b86076cebd 100644 --- a/mpcdf_common.py +++ b/mpcdf_common.py @@ -142,10 +142,13 @@ def remove_attribute(api_url, project, package, attribute_name): raise osc.oscerr.APIError("Could not remove attribute") -def mpcdf_enable_repositories(api_url, project, package, verbose=False): +def mpcdf_enable_repositories(api_url, project, package, verbose=False, filter_repos=None): from itertools import product import sys + if filter_repos is None: + filter_repos = () + root = ElementTree.fromstringlist(osc.core.show_package_meta(api_url, project, package)) build = root.find("./build") if build is None: @@ -178,6 +181,8 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False): default_cudas = try_get_attribute(None, "default_cuda") def enable(name): + if any(filtered_repo in name for filtered_repo in filter_repos): + return node = ElementTree.Element("enable") node.set("repository", name) node.tail = "\n " @@ -251,7 +256,7 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False): return True -def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, packages=None, dry_run=False): +def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, packages=None, dry_run=False, filter_repos=None): if parent: for attribute in ["compiler_modules", "default_compiler", "mpi_modules", "default_mpi", "cuda_modules", "default_cuda"]: print("Copying attribute 'MPCDF:{0}' from parent project".format(attribute)) @@ -400,7 +405,7 @@ def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, p packages = osc.core.meta_get_packagelist(api_url, project) for package in packages: print("Updating repositories for", package) - if not mpcdf_enable_repositories(api_url, project, package): + if not mpcdf_enable_repositories(api_url, project, package, filter_repos=filter_repos): print("ATTENTION: Not changing unmanaged package {0}".format(package)) # Update repositories diff --git a/mpcdf_setup_repositories.py b/mpcdf_setup_repositories.py index b9725e7fc94a583208e94651da4e060842a42e11..13e6db90aef996790f8d41842f42759f53cd3f8a 100644 --- a/mpcdf_setup_repositories.py +++ b/mpcdf_setup_repositories.py @@ -16,6 +16,8 @@ import osc.cmdln help="Setup the repositories to be based on the upstream project PARENT (e.g. for home: projects)") @osc.cmdln.option('--distribution', help="Base distribution, necessary argument unless set previously for this project") +@osc.cmdln.option('--disable-repo', metavar="REPO", action="append", + help="Temporarily disable all repositories containing REPO") @osc.cmdln.alias("mpcdf_setup_repos") def do_mpcdf_setup_repositories(self, subcmd, opts, *args): """${cmd_name}: Create all repository combinations for an MPCDF project @@ -41,4 +43,4 @@ def do_mpcdf_setup_repositories(self, subcmd, opts, *args): else: raise osc.oscerr.WrongArgs("Too many arguments") - mpcdf_setup_repositories(self.get_api_url(), project, opts.distribution, parent=opts.parent, dry_run=opts.dry_run) + mpcdf_setup_repositories(self.get_api_url(), project, opts.distribution, parent=opts.parent, dry_run=opts.dry_run, filter_repos=opts.disable_repo)