From 0fe8e763c338bda978b9ef07ceb6f17fb6d2ff22 Mon Sep 17 00:00:00 2001 From: Harmen Stoppels Date: Wed, 22 Jan 2025 17:02:23 +0100 Subject: [PATCH] bootstrap: do not show disabled sources as errors if enabled sources fail (#48676) --- lib/spack/spack/bootstrap/core.py | 40 +++++++++++++++---------------- lib/spack/spack/test/bootstrap.py | 6 ++--- 2 files changed, 21 insertions(+), 25 deletions(-) diff --git a/lib/spack/spack/bootstrap/core.py b/lib/spack/spack/bootstrap/core.py index 725cc671a09..23e3d10bd2e 100644 --- a/lib/spack/spack/bootstrap/core.py +++ b/lib/spack/spack/bootstrap/core.py @@ -37,6 +37,7 @@ import spack.concretize import spack.config import spack.detection +import spack.error import spack.mirrors.mirror import spack.platforms import spack.spec @@ -323,11 +324,9 @@ def create_bootstrapper(conf: ConfigDictionary): return _bootstrap_methods[btype](conf) -def source_is_enabled_or_raise(conf: ConfigDictionary): - """Raise ValueError if the source is not enabled for bootstrapping""" - trusted, name = spack.config.get("bootstrap:trusted"), conf["name"] - if not trusted.get(name, False): - raise ValueError("source is not trusted") +def source_is_enabled(conf: ConfigDictionary) -> bool: + """Returns true if the source is not enabled for bootstrapping""" + return spack.config.get("bootstrap:trusted").get(conf["name"], False) def ensure_module_importable_or_raise(module: str, abstract_spec: Optional[str] = None): @@ -357,24 +356,23 @@ def ensure_module_importable_or_raise(module: str, abstract_spec: Optional[str] exception_handler = GroupedExceptionHandler() for current_config in bootstrapping_sources(): + if not source_is_enabled(current_config): + continue with exception_handler.forward(current_config["name"], Exception): - source_is_enabled_or_raise(current_config) - current_bootstrapper = create_bootstrapper(current_config) - if current_bootstrapper.try_import(module, abstract_spec): + if create_bootstrapper(current_config).try_import(module, abstract_spec): return - assert exception_handler, ( - f"expected at least one exception to have been raised at this point: " - f"while bootstrapping {module}" - ) msg = f'cannot bootstrap the "{module}" Python module ' if abstract_spec: msg += f'from spec "{abstract_spec}" ' - if tty.is_debug(): + + if not exception_handler: + msg += ": no bootstrapping sources are enabled" + elif spack.error.debug or spack.error.SHOW_BACKTRACE: msg += exception_handler.grouped_message(with_tracebacks=True) else: msg += exception_handler.grouped_message(with_tracebacks=False) - msg += "\nRun `spack --debug ...` for more detailed errors" + msg += "\nRun `spack --backtrace ...` for more detailed errors" raise ImportError(msg) @@ -412,8 +410,9 @@ def ensure_executables_in_path_or_raise( exception_handler = GroupedExceptionHandler() for current_config in bootstrapping_sources(): + if not source_is_enabled(current_config): + continue with exception_handler.forward(current_config["name"], Exception): - source_is_enabled_or_raise(current_config) current_bootstrapper = create_bootstrapper(current_config) if current_bootstrapper.try_search_path(executables, abstract_spec): # Additional environment variables needed @@ -429,18 +428,17 @@ def ensure_executables_in_path_or_raise( ) return cmd - assert exception_handler, ( - f"expected at least one exception to have been raised at this point: " - f"while bootstrapping {executables_str}" - ) msg = f"cannot bootstrap any of the {executables_str} executables " if abstract_spec: msg += f'from spec "{abstract_spec}" ' - if tty.is_debug(): + + if not exception_handler: + msg += ": no bootstrapping sources are enabled" + elif spack.error.debug or spack.error.SHOW_BACKTRACE: msg += exception_handler.grouped_message(with_tracebacks=True) else: msg += exception_handler.grouped_message(with_tracebacks=False) - msg += "\nRun `spack --debug ...` for more detailed errors" + msg += "\nRun `spack --backtrace ...` for more detailed errors" raise RuntimeError(msg) diff --git a/lib/spack/spack/test/bootstrap.py b/lib/spack/spack/test/bootstrap.py index f691ab173ee..17476999790 100644 --- a/lib/spack/spack/test/bootstrap.py +++ b/lib/spack/spack/test/bootstrap.py @@ -220,14 +220,12 @@ def test_source_is_disabled(mutable_config): # The source is not explicitly enabled or disabled, so the following # call should raise to skip using it for bootstrapping - with pytest.raises(ValueError): - spack.bootstrap.core.source_is_enabled_or_raise(conf) + assert not spack.bootstrap.core.source_is_enabled(conf) # Try to explicitly disable the source and verify that the behavior # is the same as above spack.config.add("bootstrap:trusted:{0}:{1}".format(conf["name"], False)) - with pytest.raises(ValueError): - spack.bootstrap.core.source_is_enabled_or_raise(conf) + assert not spack.bootstrap.core.source_is_enabled(conf) @pytest.mark.regression("45247")