Prevent "spack external find" to error out on wrong permissions (#38755)
fixes #38733
This commit is contained in:
parent
69fe0a5518
commit
f4cf4e468a
@ -112,10 +112,15 @@ def path_to_dict(search_paths):
|
|||||||
# Reverse order of search directories so that a lib in the first
|
# Reverse order of search directories so that a lib in the first
|
||||||
# entry overrides later entries
|
# entry overrides later entries
|
||||||
for search_path in reversed(search_paths):
|
for search_path in reversed(search_paths):
|
||||||
for lib in os.listdir(search_path):
|
try:
|
||||||
lib_path = os.path.join(search_path, lib)
|
for lib in os.listdir(search_path):
|
||||||
if llnl.util.filesystem.is_readable_file(lib_path):
|
lib_path = os.path.join(search_path, lib)
|
||||||
path_to_lib[lib_path] = lib
|
if llnl.util.filesystem.is_readable_file(lib_path):
|
||||||
|
path_to_lib[lib_path] = lib
|
||||||
|
except OSError as e:
|
||||||
|
msg = f"cannot scan '{search_path}' for external software: {str(e)}"
|
||||||
|
llnl.util.tty.debug(msg)
|
||||||
|
|
||||||
return path_to_lib
|
return path_to_lib
|
||||||
|
|
||||||
|
|
||||||
|
@ -396,3 +396,30 @@ def test_use_tags_for_detection(command_args, mock_executable, mutable_config, m
|
|||||||
assert "The following specs have been" in output
|
assert "The following specs have been" in output
|
||||||
assert "cmake" in output
|
assert "cmake" in output
|
||||||
assert "openssl" not in output
|
assert "openssl" not in output
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.regression("38733")
|
||||||
|
@pytest.mark.skipif(sys.platform == "win32", reason="the test uses bash scripts")
|
||||||
|
def test_failures_in_scanning_do_not_result_in_an_error(
|
||||||
|
mock_executable, monkeypatch, mutable_config
|
||||||
|
):
|
||||||
|
"""Tests that scanning paths with wrong permissions, won't cause `external find` to error."""
|
||||||
|
cmake_exe1 = mock_executable(
|
||||||
|
"cmake", output="echo cmake version 3.19.1", subdir=("first", "bin")
|
||||||
|
)
|
||||||
|
cmake_exe2 = mock_executable(
|
||||||
|
"cmake", output="echo cmake version 3.23.3", subdir=("second", "bin")
|
||||||
|
)
|
||||||
|
|
||||||
|
# Remove access from the first directory executable
|
||||||
|
cmake_exe1.parent.chmod(0o600)
|
||||||
|
|
||||||
|
value = os.pathsep.join([str(cmake_exe1.parent), str(cmake_exe2.parent)])
|
||||||
|
monkeypatch.setenv("PATH", value)
|
||||||
|
|
||||||
|
output = external("find", "cmake")
|
||||||
|
assert external.returncode == 0
|
||||||
|
assert "The following specs have been" in output
|
||||||
|
assert "cmake" in output
|
||||||
|
assert "3.23.3" in output
|
||||||
|
assert "3.19.1" not in output
|
||||||
|
Loading…
Reference in New Issue
Block a user