diff --git a/lib/spack/spack/hooks/permissions_setters.py b/lib/spack/spack/hooks/permissions_setters.py index fbd8079783e..ac34d1490f4 100644 --- a/lib/spack/spack/hooks/permissions_setters.py +++ b/lib/spack/spack/hooks/permissions_setters.py @@ -5,18 +5,18 @@ import os -import spack.util.file_permissions as fp +import spack.package_prefs as pp def post_install(spec, explicit=None): if not spec.external: - fp.set_permissions_by_spec(spec.prefix, spec) + pp.set_permissions_by_spec(spec.prefix, spec) # os.walk explicitly set not to follow links for root, dirs, files in os.walk(spec.prefix, followlinks=False): for d in dirs: if not os.path.islink(os.path.join(root, d)): - fp.set_permissions_by_spec(os.path.join(root, d), spec) + pp.set_permissions_by_spec(os.path.join(root, d), spec) for f in files: if not os.path.islink(os.path.join(root, f)): - fp.set_permissions_by_spec(os.path.join(root, f), spec) + pp.set_permissions_by_spec(os.path.join(root, f), spec) diff --git a/lib/spack/spack/modules/common.py b/lib/spack/spack/modules/common.py index f40aa21b343..4193e5fc9a5 100644 --- a/lib/spack/spack/modules/common.py +++ b/lib/spack/spack/modules/common.py @@ -46,6 +46,7 @@ import spack.environment import spack.error import spack.modules.common +import spack.package_prefs as pp import spack.paths import spack.projections as proj import spack.repo @@ -54,7 +55,6 @@ import spack.store import spack.tengine as tengine import spack.util.environment -import spack.util.file_permissions as fp import spack.util.path import spack.util.spack_yaml as syaml from spack.context import Context @@ -969,7 +969,7 @@ def write(self, overwrite=False): # Set the file permissions of the module to match that of the package if os.path.exists(self.layout.filename): - fp.set_permissions_by_spec(self.layout.filename, self.spec) + pp.set_permissions_by_spec(self.layout.filename, self.spec) # Symlink defaults if needed self.update_module_defaults() diff --git a/lib/spack/spack/package_prefs.py b/lib/spack/spack/package_prefs.py index 6be8751d94b..eb6f8520b20 100644 --- a/lib/spack/spack/package_prefs.py +++ b/lib/spack/spack/package_prefs.py @@ -4,6 +4,7 @@ # SPDX-License-Identifier: (Apache-2.0 OR MIT) import stat import warnings +import os import spack.error import spack.repo @@ -11,6 +12,7 @@ from spack.config import ConfigError from spack.util.path import canonicalize_path from spack.version import Version +import spack.util.file_permissions as fp _lesser_spec_types = {"compiler": spack.spec.CompilerSpec, "version": Version} @@ -296,5 +298,16 @@ def get_package_group(spec): return group +def set_permissions_by_spec(path, spec): + # Get permissions for spec + if os.path.isdir(path): + perms = get_package_dir_permissions(spec) + else: + perms = get_package_permissions(spec) + group = get_package_group(spec) + + fp.set_permissions(path, perms, group) + + class VirtualInPackagesYAMLError(spack.error.SpackError): """Raised when a disallowed virtual is found in packages.yaml""" diff --git a/lib/spack/spack/util/file_permissions.py b/lib/spack/spack/util/file_permissions.py index 3d307874479..982dc022836 100644 --- a/lib/spack/spack/util/file_permissions.py +++ b/lib/spack/spack/util/file_permissions.py @@ -8,21 +8,9 @@ import llnl.util.filesystem as fs -import spack.package_prefs as pp from spack.util.error import UtilityError -def set_permissions_by_spec(path, spec): - # Get permissions for spec - if os.path.isdir(path): - perms = pp.get_package_dir_permissions(spec) - else: - perms = pp.get_package_permissions(spec) - group = pp.get_package_group(spec) - - set_permissions(path, perms, group) - - def set_permissions(path, perms, group=None): # Preserve higher-order bits of file permissions perms |= os.stat(path).st_mode & (st.S_ISUID | st.S_ISGID | st.S_ISVTX) diff --git a/lib/spack/spack/verify.py b/lib/spack/spack/verify.py index 01ca96fc7a4..ba242f35c85 100644 --- a/lib/spack/spack/verify.py +++ b/lib/spack/spack/verify.py @@ -10,9 +10,9 @@ import llnl.util.tty as tty +import spack.package_prefs as pp import spack.filesystem_view import spack.store -import spack.util.file_permissions as fp import spack.util.spack_json as sjson from spack.package_base import spack_times_log @@ -68,7 +68,7 @@ def write_manifest(spec): with open(manifest_file, "w") as f: sjson.dump(manifest, f) - fp.set_permissions_by_spec(manifest_file, spec) + pp.set_permissions_by_spec(manifest_file, spec) def check_entry(path, data):