fix iterating through paths that have spaces in them

Fixes #344, #196
This commit is contained in:
Mislav Marohnić 2013-02-24 14:52:50 +01:00
parent 382db59cd0
commit baf7656d2f
8 changed files with 51 additions and 6 deletions

View file

@ -20,9 +20,11 @@ elif [ "$1" = "--no-sh" ]; then
shift shift
fi fi
IFS=: paths=($PATH)
shopt -s nullglob shopt -s nullglob
{ for path in ${PATH//:/$'\n'}; do { for path in "${paths[@]}"; do
for command in "${path}/rbenv-"*; do for command in "${path}/rbenv-"*; do
command="${command##*rbenv-}" command="${command##*rbenv-}"
if [ -n "$sh" ]; then if [ -n "$sh" ]; then

View file

@ -32,7 +32,8 @@ fi
RBENV_COMMAND_PATH="$(rbenv-which "$RBENV_COMMAND")" RBENV_COMMAND_PATH="$(rbenv-which "$RBENV_COMMAND")"
RBENV_BIN_PATH="${RBENV_COMMAND_PATH%/*}" RBENV_BIN_PATH="${RBENV_COMMAND_PATH%/*}"
for script in $(rbenv-hooks exec); do IFS=$'\n' scripts=(`rbenv-hooks exec`)
for script in "${scripts[@]}"; do
source "$script" source "$script"
done done

View file

@ -37,9 +37,11 @@ realpath() {
cd "$cwd" cd "$cwd"
} }
IFS=: hook_paths=($RBENV_HOOK_PATH)
shopt -s nullglob shopt -s nullglob
for path in ${RBENV_HOOK_PATH//:/$'\n'}; do for path in "${hook_paths[@]}"; do
for script in $path/"$RBENV_COMMAND"/*.bash; do for script in "$path/$RBENV_COMMAND"/*.bash; do
echo $(realpath $script) echo $(realpath $script)
done done
done done

View file

@ -144,7 +144,8 @@ make_shims ../versions/*/bin/*
cd "$OLDPWD" cd "$OLDPWD"
# Allow plugins to register shims. # Allow plugins to register shims.
for script in $(rbenv-hooks rehash); do IFS=$'\n' scripts=(`rbenv-hooks rehash`)
for script in "${scripts[@]}"; do
source "$script" source "$script"
done done

View file

@ -63,7 +63,8 @@ else
RBENV_COMMAND_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}/bin/${RBENV_COMMAND}" RBENV_COMMAND_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}/bin/${RBENV_COMMAND}"
fi fi
for script in $(rbenv-hooks which); do IFS=$'\n' scripts=(`rbenv-hooks which`)
for script in "${scripts[@]}"; do
source "$script" source "$script"
done done

View file

@ -19,6 +19,18 @@ load test_helper
assert_line "shell" assert_line "shell"
} }
@test "commands in path with spaces" {
path="${RBENV_TEST_DIR}/my commands"
cmd="${path}/rbenv-sh-hello"
mkdir -p "$path"
touch "$cmd"
chmod +x "$cmd"
PATH="${path}:$PATH" run rbenv-commands --sh
assert_success
assert_line "hello"
}
@test "commands --no-sh" { @test "commands --no-sh" {
run rbenv-commands --no-sh run rbenv-commands --no-sh
assert_success assert_success

14
test/exec.bats Normal file
View file

@ -0,0 +1,14 @@
#!/usr/bin/env bats
load test_helper
@test "supports hook path with spaces" {
hook_path="${RBENV_TEST_DIR}/custom stuff/rbenv hooks"
mkdir -p "${hook_path}/exec"
echo "export HELLO='from hook'" > "${hook_path}/exec/hello.bash"
export RBENV_VERSION=system
RBENV_HOOK_PATH="$hook_path" run rbenv-exec env
assert_success
assert_line "HELLO=from hook"
}

View file

@ -28,6 +28,18 @@ create_hook() {
assert_line 2 "${RBENV_TEST_DIR}/etc/rbenv_hooks/exec/bueno.bash" assert_line 2 "${RBENV_TEST_DIR}/etc/rbenv_hooks/exec/bueno.bash"
} }
@test "supports hook paths with spaces" {
path1="${RBENV_TEST_DIR}/my hooks/rbenv.d"
path2="${RBENV_TEST_DIR}/etc/rbenv hooks"
create_hook "$path1" exec "hello.bash"
create_hook "$path2" exec "ahoy.bash"
RBENV_HOOK_PATH="$path1:$path2" run rbenv-hooks exec
assert_success
assert_line 0 "${RBENV_TEST_DIR}/my hooks/rbenv.d/exec/hello.bash"
assert_line 1 "${RBENV_TEST_DIR}/etc/rbenv hooks/exec/ahoy.bash"
}
@test "resolves relative paths" { @test "resolves relative paths" {
path="${RBENV_TEST_DIR}/rbenv.d" path="${RBENV_TEST_DIR}/rbenv.d"
create_hook "$path" exec "hello.bash" create_hook "$path" exec "hello.bash"