diff --git a/mpcdf_sync_projects.py b/mpcdf_sync_projects.py index 6d36b6208c46b5603c02e73522b1fe8d7cb80e65..16adc5f93f980b6bdf7d192b59afb9d46908259a 100644 --- a/mpcdf_sync_projects.py +++ b/mpcdf_sync_projects.py @@ -9,6 +9,8 @@ import osc.core import osc.cmdln +@osc.cmdln.option('-a', '--all', action="store_true", + help="Update all packages in the target repository, not only new ones") def do_mpcdf_sync_projects(self, subcmd, opts, *args): """${cmd_name}: Push all packages from a project to another @@ -35,12 +37,18 @@ def do_mpcdf_sync_projects(self, subcmd, opts, *args): raise osc.oscerr.WrongArgs("Too many arguments") api_url = self.get_api_url() + to_packages = osc.core.meta_get_packagelist(api_url, to_project) if package is None: from_packages = osc.core.meta_get_packagelist(api_url, from_project) + if not opts.all: + from_packages = list(sorted(set(from_packages) - set(to_packages))) + + elif opts.all: + raise osc.oscerr.WrongArgs('Cannot specify `--all` and PACKAGE') + else: from_packages = [package] - to_packages = osc.core.meta_get_packagelist(api_url, to_project) project_attributes = ["MPCDF:compiler_modules", "MPCDF:cuda_modules", "MPCDF:mpi_modules"] package_attributes = ["MPCDF:enable_repositories"] + project_attributes @@ -72,7 +80,7 @@ def do_mpcdf_sync_projects(self, subcmd, opts, *args): continue mpcdf_common.set_attribute(api_url, to_project, orig_package, attr) - if package is None: + if package is None and opts.all: # Check if distribution is already set in to_project to_prj_meta = mpcdf_common.project_meta(api_url, to_project) sys_repo = to_prj_meta.find('./repository[@name="System"]') @@ -84,5 +92,6 @@ def do_mpcdf_sync_projects(self, subcmd, opts, *args): print("Creating repository configuration") mpcdf_common.mpcdf_setup_repositories(api_url, to_project, distribution) else: - if not mpcdf_common.mpcdf_enable_repositories(api_url, to_project, package): - print("ATTENTION: Not changing unmanaged package {0}".format(package)) + for orig_package in from_packages: + if not mpcdf_common.mpcdf_enable_repositories(api_url, to_project, orig_package): + print("ATTENTION: Not changing unmanaged package {0}".format(orig_package))