Merge pull request #299 from sstephenson/automatic-local-exec

Automatic local exec
This commit is contained in:
Sam Stephenson 2012-12-28 09:05:24 -08:00
commit e0b8938fef
2 changed files with 45 additions and 10 deletions

View file

@ -37,12 +37,41 @@ create_prototype_shim() {
cat > "$PROTOTYPE_SHIM_PATH" <<SH cat > "$PROTOTYPE_SHIM_PATH" <<SH
#!/usr/bin/env bash #!/usr/bin/env bash
set -e set -e
[ -n "\$RBENV_DEBUG" ] && set -x
program="\${0##*/}"
if [ "\$program" = "ruby" ]; then
for arg; do
case "\$arg" in
-e* | -- ) break ;;
*/* )
if [ -f "\$arg" ]; then
export RBENV_DIR="\${arg%/*}"
break
fi
;;
esac
done
fi
export RBENV_ROOT="$RBENV_ROOT" export RBENV_ROOT="$RBENV_ROOT"
exec rbenv exec "\${0##*/}" "\$@" exec rbenv exec "\$program" "\$@"
SH SH
chmod +x "$PROTOTYPE_SHIM_PATH" chmod +x "$PROTOTYPE_SHIM_PATH"
} }
# If the contents of the prototype shim file differ from the contents
# of the first shim in the shims directory, assume rbenv has been
# upgraded and the existing shims need to be removed.
remove_outdated_shims() {
for shim in *; do
if ! diff "$PROTOTYPE_SHIM_PATH" "$shim" >/dev/null 2>&1; then
for shim in *; do rm -f "$shim"; done
fi
break
done
}
# The basename of each argument passed to `make_shims` will be # The basename of each argument passed to `make_shims` will be
# registered for installation as a shim. In this way, plugins may call # registered for installation as a shim. In this way, plugins may call
# `make_shims` with a glob to register many shims at once. # `make_shims` with a glob to register many shims at once.
@ -97,10 +126,11 @@ remove_stale_shims() {
# Change to the shims directory. # Change to the shims directory.
cd "$SHIM_PATH" cd "$SHIM_PATH"
shopt -s nullglob
# Create the prototype shim, then register shims for all known binaries. # Create the prototype shim, then register shims for all known binaries.
create_prototype_shim create_prototype_shim
shopt -s nullglob remove_outdated_shims
make_shims ../versions/*/bin/* make_shims ../versions/*/bin/*
# Restore the previous working directory. # Restore the previous working directory.

View file

@ -2,14 +2,19 @@
set -e set -e
[ -n "$RBENV_DEBUG" ] && set -x [ -n "$RBENV_DEBUG" ] && set -x
root="$RBENV_DIR" find_local_version_file() {
while [ -n "$root" ]; do local root="$1"
while [ -n "$root" ]; do
if [ -e "${root}/.rbenv-version" ]; then if [ -e "${root}/.rbenv-version" ]; then
echo "${root}/.rbenv-version" echo "${root}/.rbenv-version"
exit exit
fi fi
root="${root%/*}" root="${root%/*}"
done done
}
find_local_version_file "$RBENV_DIR"
[ "$RBENV_DIR" = "$PWD" ] || find_local_version_file "$PWD"
global_version_file="${RBENV_ROOT}/version" global_version_file="${RBENV_ROOT}/version"