From 1e1c9cb0dcecf7a4c5126bcd3545967e07429173 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohni=C4=87?= Date: Thu, 2 Jan 2014 22:30:21 +0100 Subject: [PATCH] Fix emulating the scenario where system Ruby is missing on OpenBSD On other systems, we expected to find system Ruby in `/usr/bin`, but in OpenBSD 5.4 it will be found in `/usr/local/bin`. This replaces the limited USRBIN_ALT hack with a more generic `path_without` function that will ensure that the given executable is not present in the resulting PATH even if it's found in multiple system paths. --- test/prefix.bats | 11 +---------- test/test_helper.bash | 22 ++++++++++++++++++++++ 2 files changed, 23 insertions(+), 10 deletions(-) diff --git a/test/prefix.bats b/test/prefix.bats index 0d6cdba6..3fb94086 100644 --- a/test/prefix.bats +++ b/test/prefix.bats @@ -25,15 +25,6 @@ load test_helper } @test "prefix for invalid system" { - USRBIN_ALT="${RBENV_TEST_DIR}/usr-bin-alt" - mkdir -p "$USRBIN_ALT" - for util in head readlink greadlink; do - if [ -x "/usr/bin/$util" ]; then - ln -s "/usr/bin/$util" "${USRBIN_ALT}/$util" - fi - done - PATH_WITHOUT_RUBY="${PATH/\/usr\/bin:/$USRBIN_ALT:}" - - PATH="$PATH_WITHOUT_RUBY" run rbenv-prefix system + PATH="$(path_without ruby)" run rbenv-prefix system assert_failure "rbenv: system version not found in PATH" } diff --git a/test/test_helper.bash b/test/test_helper.bash index 43b04d3b..53ae8e64 100644 --- a/test/test_helper.bash +++ b/test/test_helper.bash @@ -93,3 +93,25 @@ assert() { flunk "failed: $@" fi } + +# Output a modified PATH that ensures that the given executable is not present, +# but in which system utils necessary for rbenv operation are still available. +path_without() { + local exe="$1" + local path="${PATH}:" + local found alt util + for found in $(which -a "$exe"); do + found="${found%/*}" + if [ "$found" != "${RBENV_ROOT}/shims" ]; then + alt="${RBENV_TEST_DIR}/$(echo "${found#/}" | tr '/' '-')" + mkdir -p "$alt" + for util in bash head cut readlink greadlink; do + if [ -x "${found}/$util" ]; then + ln -s "${found}/$util" "${alt}/$util" + fi + done + path="${path/${found}:/${alt}:}" + fi + done + echo "${path%:}" +}