From f439ab238e01b7435dbfa94cc6a5912727ee0462 Mon Sep 17 00:00:00 2001
From: iamashwin99 <ashwin-kumar.karnad@mpsd.mpg.de>
Date: Thu, 3 Aug 2023 16:06:29 +0200
Subject: [PATCH] update remove routine

---
 src/mpsd_software_manager/mpsd_software.py | 45 ++++++++++++----------
 1 file changed, 25 insertions(+), 20 deletions(-)

diff --git a/src/mpsd_software_manager/mpsd_software.py b/src/mpsd_software_manager/mpsd_software.py
index ce13d8a..3ad7890 100755
--- a/src/mpsd_software_manager/mpsd_software.py
+++ b/src/mpsd_software_manager/mpsd_software.py
@@ -1088,8 +1088,8 @@ def remove_environment(mpsd_release, root_dir, package_sets="NONE", force_remove
     logging.warning(msg)
     # Handle 3 situations :
     # 1. remove dosent specify what to remove  -> warn and exit
-    # 1. remove all package_sets from release -> remove release folder except logs
-    # 2. remove specific package_sets from release
+    # 2. remove all package_sets from release -> remove release folder except logs
+    # 3. remove specific package_sets from release
     #       -> remove spack environments via spack commands
 
     if package_sets == "NONE":
@@ -1097,30 +1097,35 @@ def remove_environment(mpsd_release, root_dir, package_sets="NONE", force_remove
             "Please specify package_sets to remove, or 'ALL' to remove all toolchains"
         )
         sys.exit(1)
+    # 2nd case: remove the entire release for microarchitecture
+    dir_to_remove = root_dir / mpsd_release / get_native_microarchitecture()
     if "ALL" in package_sets:
         # we need to remove the entire release folder
-        logging.warning(f"Removing release {mpsd_release} from {root_dir}")
+        logging.warning(
+            f"Removing release {mpsd_release}"
+            f"from {root_dir} for {get_native_microarchitecture()}"
+        )
         if not force_remove:
             logging.warning("do you want to continue? [y/n]")
-            if input().lower() == "y":
-                force_remove = True
-        if force_remove:
-            dir_to_remove = root_dir / mpsd_release / get_native_microarchitecture()
-            folders_to_remove = os.listdir(dir_to_remove)
-            # skip logs folder
-            if "logs" in folders_to_remove:
-                folders_to_remove.remove("logs")
-            for folder in folders_to_remove:
-                shutil.rmtree(dir_to_remove / folder)
-            return
+            if input().lower() != "y":
+                sys.exit(50)  # TODO document this code.
+
+        folders_to_remove = os.listdir(dir_to_remove)
+        # skip logs folder
+        # if "logs" in folders_to_remove:
+        #     folders_to_remove.remove("logs")
+        for folder in folders_to_remove:
+            shutil.rmtree(dir_to_remove / folder)
+        logging.warning(f"Removed release {mpsd_release} from {root_dir}")
+        return
+    # 3rd case: remove specific package_sets from release
     for package_set in package_sets:
         # we load the spack environment and remove the package_set
-        spack_env = ""
-        commands_to_execute = [
-            f"source {spack_env}",
-            f"spack env remove -y {package_set}",
-        ]
-        run(" && ".join(commands_to_execute), shell=True, check=True)
+        if package_set not in ["global_packages", "global"]:
+            remove_spack_environment(dir_to_remove / "spack", package_set)
+        else:
+            # TODO remove global packages by calling remove_spack_package
+            pass
 
 
 def start_new_environment(release, from_release, target_dir):
-- 
GitLab