mirror of
https://github.com/pyenv/pyenv.git
synced 2024-12-22 15:33:36 +00:00
Simplify the shims registration implementation in rbenv-rehash
It doesn't need to be a bash array and we don't need a separate index of shims registered. Simply keep everything in a space-separated string and use that as an index as well. This assumes that executable names *never* have spaces in them.
This commit is contained in:
parent
89d4e8a0e0
commit
1381c2ca79
2 changed files with 26 additions and 18 deletions
|
@ -98,28 +98,17 @@ make_shims() {
|
|||
done
|
||||
}
|
||||
|
||||
# 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=""
|
||||
registered_shims=" "
|
||||
|
||||
# We will keep track of shims registered for installation with the
|
||||
# global `registered_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.
|
||||
# Registers the name of a shim to be generated.
|
||||
register_shim() {
|
||||
local shim="$@"
|
||||
registered_shims["${#registered_shims[@]}"]="$shim"
|
||||
registered_shims_index="$registered_shims_index/$shim/"
|
||||
registered_shims="${registered_shims}${1} "
|
||||
}
|
||||
|
||||
# To install all the registered shims, we iterate over the
|
||||
# `registered_shims` array and create a link if one does not already
|
||||
# exist.
|
||||
# Install all the shims registered via `make_shims` or `register_shim` directly.
|
||||
install_registered_shims() {
|
||||
local shim file
|
||||
for shim in "${registered_shims[@]}"; do
|
||||
for shim in $registered_shims; do
|
||||
file="${SHIM_PATH}/${shim}"
|
||||
[ -e "$file" ] || ln -f "$PROTOTYPE_SHIM_PATH" "$file"
|
||||
done
|
||||
|
@ -132,7 +121,7 @@ install_registered_shims() {
|
|||
remove_stale_shims() {
|
||||
local shim
|
||||
for shim in "$SHIM_PATH"/*; do
|
||||
if [[ "$registered_shims_index" != *"/${shim##*/}/"* ]]; then
|
||||
if [[ "$registered_shims" != *" ${shim##*/} "* ]]; then
|
||||
rm -f "$shim"
|
||||
fi
|
||||
done
|
||||
|
|
|
@ -53,7 +53,7 @@ ruby
|
|||
OUT
|
||||
}
|
||||
|
||||
@test "removes stale shims" {
|
||||
@test "removes outdated shims" {
|
||||
mkdir -p "${RBENV_ROOT}/shims"
|
||||
touch "${RBENV_ROOT}/shims/oldshim1"
|
||||
chmod +x "${RBENV_ROOT}/shims/oldshim1"
|
||||
|
@ -67,6 +67,25 @@ OUT
|
|||
assert [ ! -e "${RBENV_ROOT}/shims/oldshim1" ]
|
||||
}
|
||||
|
||||
@test "do exact matches when removing stale shims" {
|
||||
create_executable "2.0" "unicorn_rails"
|
||||
create_executable "2.0" "rspec-core"
|
||||
|
||||
rbenv-rehash
|
||||
|
||||
cp "$RBENV_ROOT"/shims/{rspec-core,rspec}
|
||||
cp "$RBENV_ROOT"/shims/{rspec-core,rails}
|
||||
cp "$RBENV_ROOT"/shims/{rspec-core,uni}
|
||||
chmod +x "$RBENV_ROOT"/shims/{rspec,rails,uni}
|
||||
|
||||
run rbenv-rehash
|
||||
assert_success ""
|
||||
|
||||
assert [ ! -e "${RBENV_ROOT}/shims/rails" ]
|
||||
assert [ ! -e "${RBENV_ROOT}/shims/rake" ]
|
||||
assert [ ! -e "${RBENV_ROOT}/shims/uni" ]
|
||||
}
|
||||
|
||||
@test "binary install locations containing spaces" {
|
||||
create_executable "dirname1 p247" "ruby"
|
||||
create_executable "dirname2 preview1" "rspec"
|
||||
|
|
Loading…
Reference in a new issue