mirrors: mirror config should use spack variable expansions (#9027)
- ensure that `$spack` and other variables are substituted into mirror paths
This commit is contained in:
parent
3b4d6ddc03
commit
15884a679b
2 changed files with 17 additions and 9 deletions
|
@ -25,7 +25,7 @@
|
||||||
import spack.util.lock
|
import spack.util.lock
|
||||||
import spack.fetch_strategy as fs
|
import spack.fetch_strategy as fs
|
||||||
import spack.util.pattern as pattern
|
import spack.util.pattern as pattern
|
||||||
from spack.util.path import canonicalize_path
|
import spack.util.path as sup
|
||||||
from spack.util.crypto import prefix_bits, bit_length
|
from spack.util.crypto import prefix_bits, bit_length
|
||||||
|
|
||||||
_source_path_subdir = 'spack-src'
|
_source_path_subdir = 'spack-src'
|
||||||
|
@ -37,7 +37,7 @@ def _first_accessible_path(paths):
|
||||||
for path in paths:
|
for path in paths:
|
||||||
try:
|
try:
|
||||||
# try to create the path if it doesn't exist.
|
# try to create the path if it doesn't exist.
|
||||||
path = canonicalize_path(path)
|
path = sup.canonicalize_path(path)
|
||||||
mkdirp(path)
|
mkdirp(path)
|
||||||
|
|
||||||
# ensure accessible
|
# ensure accessible
|
||||||
|
@ -76,7 +76,7 @@ def get_tmp_root():
|
||||||
raise StageError("No accessible stage paths in:", candidates)
|
raise StageError("No accessible stage paths in:", candidates)
|
||||||
|
|
||||||
# Return None to indicate we're using a local staging area.
|
# Return None to indicate we're using a local staging area.
|
||||||
if path == canonicalize_path(spack.paths.stage_path):
|
if path == sup.canonicalize_path(spack.paths.stage_path):
|
||||||
_use_tmp_stage = False
|
_use_tmp_stage = False
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@ -358,9 +358,11 @@ def fetch(self, mirror_only=False):
|
||||||
# Join URLs of mirror roots with mirror paths. Because
|
# Join URLs of mirror roots with mirror paths. Because
|
||||||
# urljoin() will strip everything past the final '/' in
|
# urljoin() will strip everything past the final '/' in
|
||||||
# the root, so we add a '/' if it is not present.
|
# the root, so we add a '/' if it is not present.
|
||||||
mirror_roots = [root if root.endswith('/') else root + '/'
|
mir_roots = [
|
||||||
|
sup.substitute_path_variables(root) if root.endswith(os.sep)
|
||||||
|
else sup.substitute_path_variables(root) + os.sep
|
||||||
for root in mirrors.values()]
|
for root in mirrors.values()]
|
||||||
urls = [urljoin(root, self.mirror_path) for root in mirror_roots]
|
urls = [urljoin(root, self.mirror_path) for root in mir_roots]
|
||||||
|
|
||||||
# If this archive is normally fetched from a tarball URL,
|
# If this archive is normally fetched from a tarball URL,
|
||||||
# then use the same digest. `spack mirror` ensures that
|
# then use the same digest. `spack mirror` ensures that
|
||||||
|
|
|
@ -17,6 +17,7 @@
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'substitute_config_variables',
|
'substitute_config_variables',
|
||||||
|
'substitute_path_variables',
|
||||||
'canonicalize_path']
|
'canonicalize_path']
|
||||||
|
|
||||||
# Substitutions to perform
|
# Substitutions to perform
|
||||||
|
@ -49,11 +50,16 @@ def repl(match):
|
||||||
return re.sub(r'(\$\w+\b|\$\{\w+\})', repl, path)
|
return re.sub(r'(\$\w+\b|\$\{\w+\})', repl, path)
|
||||||
|
|
||||||
|
|
||||||
def canonicalize_path(path):
|
def substitute_path_variables(path):
|
||||||
"""Substitute config vars, expand environment vars,
|
"""Substitute config vars, expand environment vars, expand user home."""
|
||||||
expand user home, take abspath."""
|
|
||||||
path = substitute_config_variables(path)
|
path = substitute_config_variables(path)
|
||||||
path = os.path.expandvars(path)
|
path = os.path.expandvars(path)
|
||||||
path = os.path.expanduser(path)
|
path = os.path.expanduser(path)
|
||||||
|
return path
|
||||||
|
|
||||||
|
|
||||||
|
def canonicalize_path(path):
|
||||||
|
"""Same as substitute_path_variables, but also take absolute path."""
|
||||||
|
path = substitute_path_variables(path)
|
||||||
path = os.path.abspath(path)
|
path = os.path.abspath(path)
|
||||||
return path
|
return path
|
||||||
|
|
Loading…
Reference in a new issue