summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorpsakievich <psakievich@gmail.com>2021-09-27 10:51:38 -0600
committerGitHub <noreply@github.com>2021-09-27 09:51:38 -0700
commitdf9d1dd1cb8b7719bcc4db45901cddaa3ab75f02 (patch)
treecb3179476142260992b3e05ce22b4ef1cf56a9b0 /lib
parent33957f27454d6851779af4cd982cf634ff38e08a (diff)
downloadspack-df9d1dd1cb8b7719bcc4db45901cddaa3ab75f02.tar.gz
spack-df9d1dd1cb8b7719bcc4db45901cddaa3ab75f02.tar.bz2
spack-df9d1dd1cb8b7719bcc4db45901cddaa3ab75f02.tar.xz
spack-df9d1dd1cb8b7719bcc4db45901cddaa3ab75f02.zip
Correct path comparisons for fs view (#25891)
* Fix path comparisons in copy views * Get correct permissions * Set group id though os Co-authored-by: Philip Sakievich <psakiev@sanida.gov>
Diffstat (limited to 'lib')
-rw-r--r--lib/spack/spack/filesystem_view.py18
-rw-r--r--lib/spack/spack/relocate.py1
2 files changed, 13 insertions, 6 deletions
diff --git a/lib/spack/spack/filesystem_view.py b/lib/spack/spack/filesystem_view.py
index 68cf7c156c..9b273934d9 100644
--- a/lib/spack/spack/filesystem_view.py
+++ b/lib/spack/spack/filesystem_view.py
@@ -61,8 +61,8 @@ def view_copy(src, dst, view, spec=None):
Use spec and view to generate relocations
"""
- shutil.copyfile(src, dst)
- if spec:
+ shutil.copy2(src, dst)
+ if spec and not spec.external:
# Not metadata, we have to relocate it
# Get information on where to relocate from/to
@@ -73,16 +73,17 @@ def view_copy(src, dst, view, spec=None):
# will have the old sbang location in their shebangs.
# TODO: Not sure which one to use...
import spack.hooks.sbang as sbang
+
orig_sbang = '#!/bin/bash {0}/bin/sbang'.format(spack.paths.spack_root)
new_sbang = sbang.sbang_shebang_line()
prefix_to_projection = OrderedDict({
- spec.prefix: view.get_projection_for_spec(spec),
- spack.paths.spack_root: view._root})
+ spec.prefix: view.get_projection_for_spec(spec)})
for dep in spec.traverse():
- prefix_to_projection[dep.prefix] = \
- view.get_projection_for_spec(dep)
+ if not dep.external:
+ prefix_to_projection[dep.prefix] = \
+ view.get_projection_for_spec(dep)
if spack.relocate.is_binary(dst):
spack.relocate.relocate_text_bin(
@@ -96,6 +97,11 @@ def view_copy(src, dst, view, spec=None):
files=[dst],
prefixes=prefix_to_projection
)
+ try:
+ stat = os.stat(src)
+ os.chown(dst, stat.st_uid, stat.st_gid)
+ except OSError:
+ tty.debug('Can\'t change the permissions for %s' % dst)
def view_func_parser(parsed_name):
diff --git a/lib/spack/spack/relocate.py b/lib/spack/spack/relocate.py
index 107b7cc87a..af2c4bedc3 100644
--- a/lib/spack/spack/relocate.py
+++ b/lib/spack/spack/relocate.py
@@ -497,6 +497,7 @@ def _replace_prefix_bin(filename, byte_prefixes):
# We only care about this problem if we are about to replace
length_compatible = len(new_bytes) <= len(orig_bytes)
if not length_compatible:
+ tty.debug('Binary failing to relocate is %s' % filename)
raise BinaryTextReplaceError(orig_bytes, new_bytes)
pad_length = len(orig_bytes) - len(new_bytes)
padding = os.sep * pad_length