From 339e331f1dcdbbe3659981968e081492817023ed Mon Sep 17 00:00:00 2001 From: Sam Stephenson Date: Thu, 27 Dec 2012 13:42:25 -0600 Subject: [PATCH] Ensure outdated shims are removed first when rehashing --- libexec/rbenv-rehash | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/libexec/rbenv-rehash b/libexec/rbenv-rehash index 2b5ffecc..a5c45756 100755 --- a/libexec/rbenv-rehash +++ b/libexec/rbenv-rehash @@ -60,6 +60,18 @@ 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. @@ -146,10 +158,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.