diff --git a/src/mpsd_software_manager/mpsd_software.py b/src/mpsd_software_manager/mpsd_software.py index 1ad97335275ee939e8273a728705bf3373e67258..6cd8565164c6851d422452a48b41869377552b05 100755 --- a/src/mpsd_software_manager/mpsd_software.py +++ b/src/mpsd_software_manager/mpsd_software.py @@ -1133,20 +1133,34 @@ def remove_environment(mpsd_release, root_dir, package_sets="NONE", force_remove if input().lower() != "y": sys.exit(60) + # Set the remove log file name from create_log_file_names + build_log_path = get_log_file_path(mpsd_release, "remove", root_dir, "ALL") + + logging.info(f"> Logging removal of {mpsd_release} at {build_log_path}") 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) #dosent delete file - run(f"rm -rf {dir_to_remove / folder}", shell=True, check=True) + run( + f"rm -rf {dir_to_remove / folder} 2>&1 | tee {build_log_path}", + shell=True, + check=True, + ) 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 + build_log_path = get_log_file_path( + mpsd_release, "remove", root_dir, package_set + ) + logging.info(f"> Logging removal of {package_set} at {build_log_path}") if package_set not in ["global_generic", "global"]: - remove_spack_environment(dir_to_remove / "spack", package_set) + remove_spack_environment( + dir_to_remove / "spack", package_set, build_log_path + ) else: # list all specs from the global_packages.list spe_folder = root_dir / mpsd_release / "spack-environments" @@ -1166,10 +1180,10 @@ def remove_environment(mpsd_release, root_dir, package_sets="NONE", force_remove # remove all packages in package_list for package in package_list: logging.info(f"Removing package {package} from installation") - remove_spack_package(dir_to_remove / "spack", package) + remove_spack_package(dir_to_remove / "spack", package, build_log_path) -def remove_spack_environment(spack_dir, environment_name): +def remove_spack_environment(spack_dir, environment_name, build_log_path=None): """Remove spack environment including packages exclusive to it. First activate the environment, @@ -1182,6 +1196,8 @@ def remove_spack_environment(spack_dir, environment_name): A Path object representing the path to the spack directory. environment_name : str A string representing the name of the spack environment to remove. + build_log_path : pathlib.Path, optional + A Path object representing the path to where the logs will be teed """ logging.warning(f"Removing spack environment {environment_name}") spack_env = spack_dir / "share" / "spack" / "setup-env.sh" @@ -1195,10 +1211,15 @@ def remove_spack_environment(spack_dir, environment_name): "spack env deactivate", f"spack env remove -y {environment_name}", ] - run(" && ".join(commands_to_execute), shell=True, check=True) + build_log_path = build_log_path or "/dev/null" + run( + " && ".join(commands_to_execute) + f" 2>&1 |tee {build_log_path}", + shell=True, + check=True, + ) -def remove_spack_package(spack_dir, package): +def remove_spack_package(spack_dir, package, build_log_path=None): """Remove spack package. Used to remove global packages. @@ -1209,6 +1230,8 @@ def remove_spack_package(spack_dir, package): A Path object representing the path to the spack directory. package : str A string representing the name of the spack package to remove. + build_log_path : pathlib.Path, optional + A Path object representing the path to where the logs will be teed """ logging.info(f"Removing spack package {package}") @@ -1218,7 +1241,11 @@ def remove_spack_package(spack_dir, package): f". {spack_env}", f"spack uninstall -y {package}", ] - run(" && ".join(commands_to_execute), shell=True, check=True) + run( + " && ".join(commands_to_execute) + f" 2>&1 |tee {build_log_path}", + shell=True, + check=True, + ) def start_new_environment(release, from_release, target_dir):