From c152e558e948a53d5c206835a027194386c5eb8c Mon Sep 17 00:00:00 2001 From: Massimiliano Culpo Date: Fri, 27 Aug 2021 11:10:03 +0200 Subject: [PATCH] Make `SpecBuildInterface` pickleable (#25628) * Add a __reduce__ method to SpecBuildInterface This class was confusing pickle when being serialized, due to its scary nature of being an object that disguise as another type. * Add more MacOS tests, switch them to clingo * Fix condition syntax * Remove Python v3.6 and v3.9 with macOS --- .github/workflows/unit_tests.yaml | 4 ++++ lib/spack/spack/spec.py | 7 ++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.github/workflows/unit_tests.yaml b/.github/workflows/unit_tests.yaml index 6436b6f6ad..29c251503c 100644 --- a/.github/workflows/unit_tests.yaml +++ b/.github/workflows/unit_tests.yaml @@ -337,10 +337,14 @@ jobs: run: | brew install dash fish gcc gnupg2 kcov - name: Run unit tests + env: + SPACK_TEST_SOLVER: clingo run: | git --version . .github/workflows/setup_git.sh . share/spack/setup-env.sh + $(which spack) bootstrap untrust spack-install + $(which spack) solve zlib if [ "${{ needs.changes.outputs.with_coverage }}" == "true" ] then coverage run $(which spack) unit-test -x diff --git a/lib/spack/spack/spec.py b/lib/spack/spack/spec.py index af282e4425..7ab0ffa5fd 100644 --- a/lib/spack/spack/spec.py +++ b/lib/spack/spack/spec.py @@ -1019,7 +1019,9 @@ class SpecBuildInterface(lang.ObjectWrapper): def __init__(self, spec, name, query_parameters): super(SpecBuildInterface, self).__init__(spec) - + # Adding new attributes goes after super() call since the ObjectWrapper + # resets __dict__ to behave like the passed object + self.token = spec, name, query_parameters is_virtual = spack.repo.path.is_virtual(name) self.last_query = QueryState( name=name, @@ -1027,6 +1029,9 @@ def __init__(self, spec, name, query_parameters): isvirtual=is_virtual ) + def __reduce__(self): + return SpecBuildInterface, self.token + @lang.lazy_lexicographic_ordering(set_hash=False) class Spec(object):