From 462379b92fe08cc59d6d870baefac22a9bba912c Mon Sep 17 00:00:00 2001 From: Gregory Becker Date: Tue, 29 Apr 2025 21:51:21 -0700 Subject: [PATCH] conditional deps: add parsing test Signed-off-by: Gregory Becker --- lib/spack/spack/spec.py | 6 +++--- lib/spack/spack/test/spec_syntax.py | 12 ++++++++++++ 2 files changed, 15 insertions(+), 3 deletions(-) diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index 200c12fae3d..aaa1ad6e5ca 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -781,7 +781,7 @@ def __str__(self) -> str: parent = self.parent.name if self.parent else None child = self.spec.name if self.spec else None virtuals_string = f"virtuals={','.join(self.virtuals)}" if self.virtuals else "" - when_string = f"when={self.when}" if self.when != Spec() else "" + when_string = f"when='{self.when}'" if self.when != Spec() else "" edge_attrs = filter(lambda x: bool(x), (virtuals_string, when_string)) return f"{parent} {self.depflag}[{' '.join(edge_attrs)}] --> {child}" @@ -1653,9 +1653,9 @@ def edge_attributes(self) -> str: virtuals_str = f"virtuals={','.join(union.virtuals)}" if union.virtuals else "" conditions = [str(c) for c in dep_conditions if c != Spec()] - when_str = f"when={','.join(conditions)}" if conditions else "" + when_str = f"when='{','.join(conditions)}'" if conditions else "" - result = f"{when_str} {deptypes_str} {virtuals_str}".strip() + result = " ".join(filter(lambda x: bool(x), (when_str, deptypes_str, virtuals_str))) if result: result = f"[{result}]" return result diff --git a/lib/spack/spack/test/spec_syntax.py b/lib/spack/spack/test/spec_syntax.py index 2cadb89016a..2fa106be50c 100644 --- a/lib/spack/spack/test/spec_syntax.py +++ b/lib/spack/spack/test/spec_syntax.py @@ -736,6 +736,18 @@ def _specfile_for(spec_str, filename): Token(SpecTokens.KEY_VALUE_PAIR, "target=x86_64"), ], "mvapich %gcc languages:='c,c++' arch=None-None-x86_64", + # Test conditional dependencies + ( + "foo ^[when='%c' virtuals=c]gcc", + [ + Token(SpecTokens.UNQUALIFIED_PACKAGE_NAME, "foo"), + Token(SpecTokens.START_EDGE_PROPERTIES, "^["), + Token(SpecTokens.KEY_VALUE_PAIR, "when='%c'"), + Token(SpecTokens.KEY_VALUE_PAIR, "virtuals=c"), + Token(SpecTokens.END_EDGE_PROPERTIES, "]"), + Token(SpecTokens.UNQUALIFIED_PACKAGE_NAME, "gcc"), + ], + "foo ^[when='%c' virtuals=c] gcc", ), ], )