From ca6be534f2d65eaa96321eb9659b46d63b42c0d4 Mon Sep 17 00:00:00 2001 From: Alexander Grund Date: Fri, 3 Jan 2025 16:38:05 +0100 Subject: [PATCH] Avoid making builddir read-only When using e.g. `--stop=patch` the log directory will be inside the build directory. When `--read-only-installdir` is set the log directory and the build directory itself will be read-only which is not what the option intended: The `ensure_writable_log_dir` function changes the permissions of the folder containing the log directory to writeable without checking if this is required. When supposedly reverting it any write permissions will be removed even if they have been there before. Similar the write permissions of the log directory are removed even when the installation was stopped. This adds the neccessary checks. --- easybuild/framework/easyblock.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index a515bc4c86..21a85f21a0 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -4324,7 +4324,7 @@ def ensure_writable_log_dir(log_dir): adjust_permissions(log_dir, stat.S_IWUSR, add=True, recursive=True) else: parent_dir = os.path.dirname(log_dir) - if os.path.exists(parent_dir): + if os.path.exists(parent_dir) and not (os.stat(parent_dir).st_mode & stat.S_IWUSR): adjust_permissions(parent_dir, stat.S_IWUSR, add=True, recursive=False) mkdir(log_dir, parents=True) adjust_permissions(parent_dir, stat.S_IWUSR, add=False, recursive=False) @@ -4405,7 +4405,7 @@ def ensure_writable_log_dir(log_dir): copy_file(patch['path'], target) _log.debug("Copied patch %s to %s", patch['path'], target) - if build_option('read_only_installdir'): + if build_option('read_only_installdir') and not app.cfg['stop']: # take away user write permissions (again) perms = stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH adjust_permissions(new_log_dir, perms, add=False, recursive=True)