Skip to content
Snippets Groups Projects
Unverified Commit eb286bb8 authored by Massimiliano Culpo's avatar Massimiliano Culpo Committed by Todd Gamblin
Browse files

Specs with quoted flags containing spaces are parsed correctly (#13521)

parent 1cc69e1c
No related branches found
No related tags found
No related merge requests found
...@@ -24,6 +24,7 @@ ...@@ -24,6 +24,7 @@
import spack.spec import spack.spec
import spack.store import spack.store
import spack.util.spack_json as sjson import spack.util.spack_json as sjson
import spack.util.string
from spack.error import SpackError from spack.error import SpackError
...@@ -134,7 +135,9 @@ def parse_specs(args, **kwargs): ...@@ -134,7 +135,9 @@ def parse_specs(args, **kwargs):
tests = kwargs.get('tests', False) tests = kwargs.get('tests', False)
try: try:
sargs = args if isinstance(args, six.string_types) else ' '.join(args) sargs = args
if not isinstance(args, six.string_types):
sargs = ' '.join(spack.util.string.quote(args))
specs = spack.spec.parse(sargs) specs = spack.spec.parse(sargs)
for spec in specs: for spec in specs:
if concretize: if concretize:
......
...@@ -9,6 +9,7 @@ ...@@ -9,6 +9,7 @@
import pytest import pytest
import spack.cmd
import spack.cmd.common.arguments as arguments import spack.cmd.common.arguments as arguments
import spack.config import spack.config
...@@ -62,3 +63,20 @@ def test_negative_integers_not_allowed_for_parallel_jobs(parser): ...@@ -62,3 +63,20 @@ def test_negative_integers_not_allowed_for_parallel_jobs(parser):
parser.parse_args(['-j', '-2']) parser.parse_args(['-j', '-2'])
assert 'expected a positive integer' in str(exc_info.value) assert 'expected a positive integer' in str(exc_info.value)
@pytest.mark.parametrize('specs,expected_variants,unexpected_variants', [
(['coreutils', 'cflags=-O3 -g'], [], ['g']),
(['coreutils', 'cflags=-O3', '-g'], ['g'], []),
])
@pytest.mark.regression('12951')
def test_parse_spec_flags_with_spaces(
specs, expected_variants, unexpected_variants
):
spec_list = spack.cmd.parse_specs(specs)
assert len(spec_list) == 1
s = spec_list.pop()
assert all(x not in s.variants for x in unexpected_variants)
assert all(x in s.variants for x in expected_variants)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment