mirror of
https://github.com/pyenv/pyenv.git
synced 2024-12-22 19:53:35 +00:00
Merge branch 'master' into help
This commit is contained in:
commit
ef44b4ccac
10 changed files with 93 additions and 78 deletions
18
README.md
18
README.md
|
@ -128,24 +128,16 @@ easy to fork and contribute any changes back upstream.
|
|||
$ exec $SHELL -l
|
||||
~~~
|
||||
|
||||
5. Install Ruby versions into `~/.rbenv/versions`. For example, to
|
||||
manually compile Ruby [from source](https://github.com/ruby/ruby),
|
||||
download it and run:
|
||||
|
||||
~~~ sh
|
||||
$ [ -f ./configure ] || autoconf
|
||||
$ ./configure --prefix=$HOME/.rbenv/versions/1.9.3-p327
|
||||
$ make
|
||||
$ make install
|
||||
~~~
|
||||
|
||||
The [ruby-build][] project, however, provides an `rbenv install`
|
||||
command that simplifies the process of installing new Ruby versions:
|
||||
5. Install [ruby-build][], which provides an `rbenv install`
|
||||
command that simplifies the process of installing new Ruby versions.
|
||||
|
||||
~~~
|
||||
$ rbenv install 1.9.3-p327
|
||||
~~~
|
||||
|
||||
As an alternative, you can download and compile Ruby yourself into
|
||||
`~/.rbenv/versions/`.
|
||||
|
||||
6. Rebuild the shim binaries. You should do this any time you install
|
||||
a new Ruby binary (for example, when installing a new Ruby version,
|
||||
or when installing a gem that provides a binary).
|
||||
|
|
|
@ -5,8 +5,10 @@ _rbenv() {
|
|||
if [ "$COMP_CWORD" -eq 1 ]; then
|
||||
COMPREPLY=( $(compgen -W "$(rbenv commands)" -- "$word") )
|
||||
else
|
||||
local command="${COMP_WORDS[1]}"
|
||||
local completions="$(rbenv completions "$command")"
|
||||
local words=("${COMP_WORDS[@]}")
|
||||
unset words[0]
|
||||
unset words[$COMP_CWORD]
|
||||
local completions=$(rbenv completions "${words[@]}")
|
||||
COMPREPLY=( $(compgen -W "$completions" -- "$word") )
|
||||
fi
|
||||
}
|
||||
|
|
|
@ -5,14 +5,13 @@ fi
|
|||
compctl -K _rbenv rbenv
|
||||
|
||||
_rbenv() {
|
||||
local word words completions
|
||||
local words completions
|
||||
read -cA words
|
||||
word="${words[2]}"
|
||||
|
||||
if [ "${#words}" -eq 2 ]; then
|
||||
completions="$(rbenv commands)"
|
||||
else
|
||||
completions="$(rbenv completions "${word}")"
|
||||
completions="$(rbenv completions ${words[2,-1]})"
|
||||
fi
|
||||
|
||||
reply=("${(ps:\n:)completions}")
|
||||
|
|
|
@ -60,7 +60,7 @@ shopt -u nullglob
|
|||
command="$1"
|
||||
case "$command" in
|
||||
"" | "-h" | "--help" )
|
||||
echo -e "rbenv $(rbenv---version)\n$(rbenv-help)" >&2
|
||||
echo -e "$(rbenv---version)\n$(rbenv-help)" >&2
|
||||
;;
|
||||
"-v" )
|
||||
exec rbenv---version
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
version=v0.3.0
|
||||
version=0.3.0
|
||||
|
||||
cd "$RBENV_ROOT"
|
||||
git_revision="$(git describe --tags HEAD 2>/dev/null || true)"
|
||||
git_revision="${git_revision#v}"
|
||||
|
||||
echo ${git_revision:-$version}
|
||||
echo "rbenv ${git_revision:-$version}"
|
||||
|
|
|
@ -7,7 +7,9 @@ if [ "$1" = "--complete" ]; then
|
|||
exec rbenv shims --short
|
||||
fi
|
||||
|
||||
export RBENV_VERSION="$(rbenv-version-name)"
|
||||
RBENV_COMMAND="$1"
|
||||
|
||||
if [ -z "$RBENV_COMMAND" ]; then
|
||||
echo "usage: rbenv exec COMMAND [arg1 arg2...]" >&2
|
||||
exit 1
|
||||
|
@ -21,5 +23,7 @@ for script in $(rbenv-hooks exec); do
|
|||
done
|
||||
|
||||
shift 1
|
||||
export PATH="${RBENV_BIN_PATH}:${PATH}"
|
||||
if [ "$RBENV_VERSION" != "system" ]; then
|
||||
export PATH="${RBENV_BIN_PATH}:${PATH}"
|
||||
fi
|
||||
exec -a "$RBENV_COMMAND" "$RBENV_COMMAND_PATH" "$@"
|
||||
|
|
|
@ -86,7 +86,8 @@ commands=(`rbenv-commands --sh`)
|
|||
IFS="|"
|
||||
cat <<EOS
|
||||
rbenv() {
|
||||
local command="\$1"
|
||||
typeset command
|
||||
command="\$1"
|
||||
if [ "\$#" -gt 0 ]; then
|
||||
shift
|
||||
fi
|
||||
|
|
|
@ -39,12 +39,41 @@ create_prototype_shim() {
|
|||
cat > "$PROTOTYPE_SHIM_PATH" <<SH
|
||||
#!/usr/bin/env bash
|
||||
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"
|
||||
exec rbenv exec "\${0##*/}" "\$@"
|
||||
exec rbenv exec "\$program" "\$@"
|
||||
SH
|
||||
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
|
||||
# registered for installation as a shim. In this way, plugins may call
|
||||
# `make_shims` with a glob to register many shims at once.
|
||||
|
@ -57,58 +86,27 @@ make_shims() {
|
|||
done
|
||||
}
|
||||
|
||||
# Create an empty array for the list of registered shims.
|
||||
# Create an empty array for the list of registered shims and an empty
|
||||
# string to use as a search index.
|
||||
registered_shims=()
|
||||
registered_shims_index=""
|
||||
|
||||
# We will keep track of shims registered for installation with the
|
||||
# global `reigstered_shims` array and with a global variable for each
|
||||
# shim. The array will let us iterate over all registered shims. The
|
||||
# global variables will let us quickly check whether a shim with the
|
||||
# given name has been registered or not.
|
||||
# global `reigstered_shims` array and with a global search index
|
||||
# string. The array will let us iterate over all registered shims. The
|
||||
# index string will let us quickly check whether a shim with the given
|
||||
# name has been registered or not.
|
||||
register_shim() {
|
||||
local shim="$@"
|
||||
local var="$(shim_variable_name "$shim")"
|
||||
|
||||
if [ -z "${!var}" ]; then
|
||||
registered_shims[${#registered_shims[*]}]="$shim"
|
||||
eval "${var}=1"
|
||||
fi
|
||||
}
|
||||
|
||||
# To compute the global variable name for a given shim we must first
|
||||
# escape any non-alphanumeric characters. If the shim name is
|
||||
# alphanumeric (including a hyphen or underscore) we can take a
|
||||
# shorter path. Otherwise, we must iterate over each character and
|
||||
# escape the non-alphanumeric ones using `printf`.
|
||||
shim_variable_name() {
|
||||
local shim="$1"
|
||||
local result="_shim_"
|
||||
|
||||
if [[ ! "$shim" =~ [^[:alnum:]_-] ]]; then
|
||||
shim="${shim//_/_5f}"
|
||||
shim="${shim//-/_2d}"
|
||||
result="$result$shim"
|
||||
else
|
||||
local length="${#shim}"
|
||||
local char i
|
||||
|
||||
for ((i=0; i<length; i++)); do
|
||||
char="${shim:$i:1}"
|
||||
if [[ "$char" =~ [[:alnum:]] ]]; then
|
||||
result="$result$char"
|
||||
else
|
||||
result="$result$(printf "_%02x" \'"$char")"
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
echo "$result"
|
||||
registered_shims["${#registered_shims[@]}"]="$shim"
|
||||
registered_shims_index="$registered_shims_index/$shim/"
|
||||
}
|
||||
|
||||
# To install all the registered shims, we iterate over the
|
||||
# `registered_shims` array and create a link if one does not already
|
||||
# exist.
|
||||
install_registered_shims() {
|
||||
local shim
|
||||
for shim in "${registered_shims[@]}"; do
|
||||
[ -e "$shim" ] || ln -f "$PROTOTYPE_SHIM_PATH" "$shim"
|
||||
done
|
||||
|
@ -119,11 +117,10 @@ install_registered_shims() {
|
|||
# in the directory but has not been registered as a shim should be
|
||||
# removed.
|
||||
remove_stale_shims() {
|
||||
local var
|
||||
local shim
|
||||
for shim in *; do
|
||||
var="$(shim_variable_name "$shim")"
|
||||
if [ -z "${!var}" ]; then
|
||||
rm -f "$shim"
|
||||
if [[ "$registered_shims_index" != *"/$shim/"* ]]; then
|
||||
rm -f "$shim"
|
||||
fi
|
||||
done
|
||||
}
|
||||
|
@ -131,10 +128,11 @@ remove_stale_shims() {
|
|||
|
||||
# Change to the shims directory.
|
||||
cd "$SHIM_PATH"
|
||||
shopt -s nullglob
|
||||
|
||||
# Create the prototype shim, then register shims for all known binaries.
|
||||
create_prototype_shim
|
||||
shopt -s nullglob
|
||||
remove_outdated_shims
|
||||
make_shims ../versions/*/bin/*
|
||||
|
||||
# Restore the previous working directory.
|
||||
|
|
13
libexec/rbenv-sh-rehash
Executable file
13
libexec/rbenv-sh-rehash
Executable file
|
@ -0,0 +1,13 @@
|
|||
#!/usr/bin/env bash
|
||||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
# Provide rbenv completions
|
||||
if [ "$1" = "--complete" ]; then
|
||||
exec rbenv-rehash --complete
|
||||
fi
|
||||
|
||||
# When rbenv shell integration is enabled, delegate to rbenv-rehash,
|
||||
# then tell the shell to empty its command lookup cache.
|
||||
rbenv-rehash
|
||||
echo "hash -r"
|
|
@ -2,14 +2,19 @@
|
|||
set -e
|
||||
[ -n "$RBENV_DEBUG" ] && set -x
|
||||
|
||||
root="$RBENV_DIR"
|
||||
while [ -n "$root" ]; do
|
||||
if [ -e "${root}/.rbenv-version" ]; then
|
||||
echo "${root}/.rbenv-version"
|
||||
exit
|
||||
fi
|
||||
root="${root%/*}"
|
||||
done
|
||||
find_local_version_file() {
|
||||
local root="$1"
|
||||
while [ -n "$root" ]; do
|
||||
if [ -e "${root}/.rbenv-version" ]; then
|
||||
echo "${root}/.rbenv-version"
|
||||
exit
|
||||
fi
|
||||
root="${root%/*}"
|
||||
done
|
||||
}
|
||||
|
||||
find_local_version_file "$RBENV_DIR"
|
||||
[ "$RBENV_DIR" = "$PWD" ] || find_local_version_file "$PWD"
|
||||
|
||||
global_version_file="${RBENV_ROOT}/version"
|
||||
|
||||
|
|
Loading…
Reference in a new issue