From 09e14fe9ae5f67eb0324b3cb0391172489c658ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Lorenz=20H=C3=BCdepohl?= <dev@stellardeath.org>
Date: Mon, 6 Apr 2020 11:54:46 +0200
Subject: [PATCH] Make it possible to disable packages again

Previously, the logic decided that it didn't need to look at the
sub-projects, as the main package is disabled. However, if it was
previously enabled the --disable didn't touch the branched packages in
the sub-projects and those stayed enabled.
---
 mpcdf_common.py              | 21 +++++++--------------
 mpcdf_enable_repositories.py |  2 +-
 2 files changed, 8 insertions(+), 15 deletions(-)

diff --git a/mpcdf_common.py b/mpcdf_common.py
index 72459a7..c7a303e 100644
--- a/mpcdf_common.py
+++ b/mpcdf_common.py
@@ -880,21 +880,15 @@ def sync_projects(api_url, package=None, from_project="software", to_projects=No
         else:
             from_packages = [package]
 
-        def non_system_package(package):
-            enable_repos = get_attribute_values(api_url, from_project, package, "MPCDF:enable_repositories")
-            if len(enable_repos) == 0:
-                print("Not branching package {0}, is disabled".format(package))
-                return False
-            elif enable_repos == ["system"]:
-                print("Not branching package {0}, is only enabled for 'system'".format(package))
-                return False
-            else:
-                return True
-
-        from_packages = list(filter(non_system_package, from_packages))
-
         for orig_package in from_packages:
+            enable_repos = get_attribute_values(api_url, from_project, orig_package, "MPCDF:enable_repositories")
             if orig_package not in to_packages:
+                if len(enable_repos) == 0:
+                    print("Not branching package {0}, is disabled".format(package))
+                    continue
+                elif enable_repos == ["system"]:
+                    print("Not branching package {0}, is only enabled for 'system'".format(package))
+                    continue
                 filelist = osc.core.meta_get_filelist(api_url, from_project, orig_package)
                 if "_link" in filelist:
                     print("Not branching package {0}, is a link".format(orig_package))
@@ -928,7 +922,6 @@ def sync_projects(api_url, package=None, from_project="software", to_projects=No
                             to_meta.insert(2, person)
                         osc.core.edit_meta("pkg", (to_project, orig_package), data=ElementTree.tostring(to_meta), apiurl=api_url)
 
-        for orig_package in from_packages:
             try:
                 mpcdf_enable_repositories(api_url, to_project, orig_package, verbose=verbose)
             except UnmanagedPackageException:
diff --git a/mpcdf_enable_repositories.py b/mpcdf_enable_repositories.py
index c7168d0..25c32bf 100644
--- a/mpcdf_enable_repositories.py
+++ b/mpcdf_enable_repositories.py
@@ -92,7 +92,7 @@ def do_mpcdf_enable_repositories(self, subcmd, opts, *args):
     if opts.recreate or opts.set or opts.disable:
         mpcdf_common.mpcdf_enable_repositories(api_url, project, package, verbose=True, dry_run=opts.dry_run)
         enabled = mpcdf_common.get_attribute_values(api_url, project, package, "MPCDF:enable_repositories")
-        if project == "software" and enabled != ["system"] and len(enabled) > 0 and not opts.dry_run:
+        if project == "software" and enabled != ["system"] and (len(enabled) > 0 or opts.disable) and not opts.dry_run:
             mpcdf_common.sync_projects(api_url, package, verbose=True)
 
     elif (opts.compiler_modules or opts.mpi_modules or opts.cuda_modules):
-- 
GitLab