From affd2236e6f48e693eb5cbbf50baf2a9b413d7e7 Mon Sep 17 00:00:00 2001 From: Tamara Dahlgren <35777542+tldahlgren@users.noreply.github.com> Date: Wed, 6 Oct 2021 12:03:33 -0700 Subject: Provide more info in `SbangPathError` to aid CI debugging (#26316) --- lib/spack/spack/hooks/sbang.py | 9 ++++++--- lib/spack/spack/test/sbang.py | 18 ++++++++++++++++++ 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/spack/spack/hooks/sbang.py b/lib/spack/spack/hooks/sbang.py index 7eff565618..33aa29691f 100644 --- a/lib/spack/spack/hooks/sbang.py +++ b/lib/spack/spack/hooks/sbang.py @@ -28,9 +28,12 @@ def sbang_install_path(): """Location sbang should be installed within Spack's ``install_tree``.""" sbang_root = str(spack.store.unpadded_root) install_path = os.path.join(sbang_root, "bin", "sbang") - if len(install_path) > shebang_limit: - raise SbangPathError( - 'Install tree root is too long. Spack cannot patch shebang lines.') + path_length = len(install_path) + if path_length > shebang_limit: + msg = ('Install tree root is too long. Spack cannot patch shebang lines' + ' when script path length ({0}) exceeds limit ({1}).\n {2}') + msg = msg.format(path_length, shebang_limit, install_path) + raise SbangPathError(msg) return install_path diff --git a/lib/spack/spack/test/sbang.py b/lib/spack/spack/test/sbang.py index 57ae2ba0f6..e0d7a8ccf3 100644 --- a/lib/spack/spack/test/sbang.py +++ b/lib/spack/spack/test/sbang.py @@ -225,3 +225,21 @@ def test_install_sbang(install_mockery): # install again and make sure sbang is still fine sbang.install_sbang() check_sbang_installation() + + +def test_install_sbang_too_long(tmpdir): + root = str(tmpdir) + num_extend = sbang.shebang_limit - len(root) - len('/bin/sbang') + long_path = root + while num_extend > 1: + add = min(num_extend, 255) + long_path = os.path.join(long_path, 'e' * add) + num_extend -= add + with spack.store.use_store(spack.store.Store(long_path)): + with pytest.raises(sbang.SbangPathError) as exc_info: + sbang.sbang_install_path() + + err = str(exc_info.value) + assert 'root is too long' in err + assert 'exceeds limit' in err + assert 'cannot patch' in err -- cgit v1.2.3-70-g09d2