Isolate util/file_permissions

This commit is contained in:
Douglas Jacobsen 2023-11-09 08:15:01 -07:00
parent 1f0a8755c7
commit 330a5c0010
5 changed files with 21 additions and 20 deletions

View File

@ -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)

View File

@ -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()

View File

@ -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"""

View File

@ -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)

View File

@ -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):