From 7d053cb509a98def270af1290e83a83f8b20e3b4 Mon Sep 17 00:00:00 2001 From: Andrew Kimler Date: Mon, 27 Jul 2026 09:13:07 -0600 Subject: [PATCH] Fix parsing special characters in environment names for distribution.py --- manager/manager_cmds/distribution.py | 6 +++++- tests/test_distribution.py | 17 +++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/manager/manager_cmds/distribution.py b/manager/manager_cmds/distribution.py index 4f5e211b..7ea3c1a8 100644 --- a/manager/manager_cmds/distribution.py +++ b/manager/manager_cmds/distribution.py @@ -2,6 +2,7 @@ import fnmatch import glob import os +import re import shutil import tempfile from pathlib import Path @@ -165,7 +166,10 @@ def canonicalize_path(spath): def valid_env_scopes(env): - scopes = spack.config.CONFIG.matching_scopes(f"^env:{env.name}|^include:") + env_name = getattr(env, "name", None) + escaped_env_name = re.escape(env_name) + pattern = f"^(env:{escaped_env_name}|include:)" + scopes = spack.config.CONFIG.matching_scopes(pattern) return [s.name for s in scopes] diff --git a/tests/test_distribution.py b/tests/test_distribution.py index 37f3da58..4d07f696 100644 --- a/tests/test_distribution.py +++ b/tests/test_distribution.py @@ -253,6 +253,23 @@ def test_get_valid_env_scopes(tmpdir): assert len(scope_names) == 2 +def test_get_valid_env_scopes_escape_chars(tmpdir): + """ + Regression test: valid_env_scopes should match an environment scope even + when env.name contains regex-special characters. + """ + env_dir = os.path.join(tmpdir.strpath, "escape_char+_-=/*!~", "environment") + manifest = os.path.join(env_dir, "spack.yaml") + + create_spack_manifest(manifest) + + env = spack.environment.environment_from_name_or_dir(os.path.dirname(manifest)) + with env: + scope_names = distribution.valid_env_scopes(env) + + assert f"env:{env.name}" in scope_names + + class MockArgs: def __init__(self, source=False, binary=False): self.source_only = source