Skip to content

Commit

Permalink
fix iterating through paths that have spaces in them
Browse files Browse the repository at this point in the history
  • Loading branch information
mislav committed Mar 31, 2013
1 parent 382db59 commit baf7656
Show file tree
Hide file tree
Showing 8 changed files with 51 additions and 6 deletions.
4 changes: 3 additions & 1 deletion libexec/rbenv-commands
Expand Up @@ -20,9 +20,11 @@ elif [ "$1" = "--no-sh" ]; then
shift
fi

IFS=: paths=($PATH)

shopt -s nullglob

{ for path in ${PATH//:/$'\n'}; do
{ for path in "${paths[@]}"; do
for command in "${path}/rbenv-"*; do
command="${command##*rbenv-}"
if [ -n "$sh" ]; then
Expand Down
3 changes: 2 additions & 1 deletion libexec/rbenv-exec
Expand Up @@ -32,7 +32,8 @@ fi
RBENV_COMMAND_PATH="$(rbenv-which "$RBENV_COMMAND")"
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"
done

Expand Down
6 changes: 4 additions & 2 deletions libexec/rbenv-hooks
Expand Up @@ -37,9 +37,11 @@ realpath() {
cd "$cwd"
}

IFS=: hook_paths=($RBENV_HOOK_PATH)

shopt -s nullglob
for path in ${RBENV_HOOK_PATH//:/$'\n'}; do
for script in $path/"$RBENV_COMMAND"/*.bash; do
for path in "${hook_paths[@]}"; do
for script in "$path/$RBENV_COMMAND"/*.bash; do
echo $(realpath $script)
done
done
Expand Down
3 changes: 2 additions & 1 deletion libexec/rbenv-rehash
Expand Up @@ -144,7 +144,8 @@ make_shims ../versions/*/bin/*
cd "$OLDPWD"

# 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"
done

Expand Down
3 changes: 2 additions & 1 deletion libexec/rbenv-which
Expand Up @@ -63,7 +63,8 @@ else
RBENV_COMMAND_PATH="${RBENV_ROOT}/versions/${RBENV_VERSION}/bin/${RBENV_COMMAND}"
fi

for script in $(rbenv-hooks which); do
IFS=$'\n' scripts=(`rbenv-hooks which`)
for script in "${scripts[@]}"; do
source "$script"
done

Expand Down
12 changes: 12 additions & 0 deletions test/commands.bats
Expand Up @@ -19,6 +19,18 @@ load test_helper
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" {
run rbenv-commands --no-sh
assert_success
Expand Down
14 changes: 14 additions & 0 deletions test/exec.bats
@@ -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"
}
12 changes: 12 additions & 0 deletions test/hooks.bats
Expand Up @@ -28,6 +28,18 @@ create_hook() {
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" {
path="${RBENV_TEST_DIR}/rbenv.d"
create_hook "$path" exec "hello.bash"
Expand Down

0 comments on commit baf7656

Please sign in to comment.