Currently, the custom config scopes are pushed at the top when constructing configuration, and are demoted whenever a context manager activating an environment is used - see #48414 for details. Workflows that rely on the order in the [docs](https://spack.readthedocs.io/en/latest/configuration.html#custom-scopes) are thus fragile, and may break This PR allows to assign priorities to scopes, and ensures that scopes of lower priorities are always "below" scopes of higher priorities. When scopes have the same priority, what matters is the insertion order. Modifications: - [x] Add a mapping that iterates over keys according to priorities set when adding the key/value pair - [x] Use that mapping to allow assigning priorities to configuration scopes - [x] Assign different priorities for different kind of scopes, to fix a bug, and add a regression test - [x] Simplify `Configuration` constructor - [x] Remove `Configuration.pop_scope` --------- Signed-off-by: Massimiliano Culpo <massimiliano.culpo@gmail.com>
25 lines
612 B
Python
25 lines
612 B
Python
# Copyright Spack Project Developers. See COPYRIGHT file for details.
|
|
#
|
|
# SPDX-License-Identifier: (Apache-2.0 OR MIT)
|
|
"""Enumerations used throughout Spack"""
|
|
import enum
|
|
|
|
|
|
class InstallRecordStatus(enum.Flag):
|
|
"""Enum flag to facilitate querying status from the DB"""
|
|
|
|
INSTALLED = enum.auto()
|
|
DEPRECATED = enum.auto()
|
|
MISSING = enum.auto()
|
|
ANY = INSTALLED | DEPRECATED | MISSING
|
|
|
|
|
|
class ConfigScopePriority(enum.IntEnum):
|
|
"""Priorities of the different kind of config scopes used by Spack"""
|
|
|
|
BUILTIN = 0
|
|
CONFIG_FILES = 1
|
|
CUSTOM = 2
|
|
ENVIRONMENT = 3
|
|
COMMAND_LINE = 4
|