From a8d78f8d06ccf10c9cae0d357129c886dfd9e32c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lorenz=20H=C3=BCdepohl?= <lorenz.huedepohl@rzg.mpg.de>
Date: Tue, 12 Mar 2019 11:47:16 +0100
Subject: [PATCH] No longer remove unneeded repos, disable them

---
 mpcdf_common.py             | 14 +++++++++++---
 mpcdf_setup_repositories.py |  7 ++++++-
 2 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/mpcdf_common.py b/mpcdf_common.py
index a026980..4058dbc 100644
--- a/mpcdf_common.py
+++ b/mpcdf_common.py
@@ -321,7 +321,7 @@ def mpcdf_enable_repositories(api_url, project, package, verbose=False, filter_r
     return True
 
 
-def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, packages=None, dry_run=False, filter_repos=None, only_project=False):
+def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, packages=None, dry_run=False, filter_repos=None, only_project=False, remove_old=False):
     if parent:
         for attribute in config_attributes + default_attributes:
             print("Copying attribute '{0}' from parent project".format(attribute))
@@ -366,8 +366,9 @@ def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, p
     prjconf = [start_marker]
 
     # Remove existing repositories
-    for oldrepo in root.findall("./repository"):
-        root.remove(oldrepo)
+    if remove_old:
+        for oldrepo in root.findall("./repository"):
+            root.remove(oldrepo)
 
     def repo(name, *dependencies, **kwargs):
         is_compiler = kwargs.pop("compiler", False)
@@ -381,6 +382,13 @@ def mpcdf_setup_repositories(api_url, project, distribution=None, parent=None, p
         have_mpi = is_mpi or is_cuda_mpi
         have_cuda = is_cuda or is_cuda_mpi
 
+        existing_repo = root.find("./repository[@name='{0}']".format(name))
+        if existing_repo is not None:
+            print("Modifying existing repository", name)
+            root.remove(existing_repo)
+        else:
+            print("New repository", name)
+
         r = ElementTree.SubElement(root, "repository")
         r.set("name", name)
         r.text = "\n    "
diff --git a/mpcdf_setup_repositories.py b/mpcdf_setup_repositories.py
index 5031e8a..dc13c68 100644
--- a/mpcdf_setup_repositories.py
+++ b/mpcdf_setup_repositories.py
@@ -20,6 +20,8 @@ import osc.cmdln
                   help="Temporarily disable all repositories containing REPO")
 @osc.cmdln.option('--only-project', action="store_true", default=False,
                   help="Only change project metadata 'prj' and 'prjconf', leave individual packages unchanged")
+@osc.cmdln.option('--remove-old', action="store_true", default=False,
+                  help="Remove all obsolete repositories instead of only disabling builds for packages there")
 @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
@@ -45,4 +47,7 @@ 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, filter_repos=opts.disable_repo, only_project=opts.only_project)
+    mpcdf_setup_repositories(self.get_api_url(),
+                             project, opts.distribution,
+                             parent=opts.parent, dry_run=opts.dry_run, filter_repos=opts.disable_repo,
+                             only_project=opts.only_project, remove_old=opts.remove_old)
-- 
GitLab