create hook: version-origin
Expose a `version-origin` hook.
It is invoked *before* the traditional `rbenv-version-file` lookup. Because `version-origin` is traditionally run immediately after `version-name`, then any plugin hooks that alter `version-name` would have done so. Thus, running `version-origin` prior to printing the origin gives those plugins a chance to alter the `version-origin` to match.
If any of the hooks set `$RBENV_VERSION_ORIGIN`, then it is used as the return value. Otherwise, the existing logic continues to return "environment variable" or "filename" as appropriate.
This change, in conjunction with the `version-name` hook, makes a clean seam by which plugins can inject their own ruby version setting logic. Using this seam, as opposed to altering `$RBENV_COMMAND_PATH` from the `which` hook, means that the version name and origin are set more reliably and so `version`, `version-name`, `version-origin` and `which` all work as expected. Indeed, even PS1 works now.
9 lat temu |
|
- #!/usr/bin/env bash
- # Summary: Explain how the current Ruby version is set
- set -e
- [ -n "$RBENV_DEBUG" ] && set -x
-
- unset RBENV_VERSION_ORIGIN
-
- OLDIFS="$IFS"
- IFS=$'\n' scripts=(`rbenv-hooks version-origin`)
- IFS="$OLDIFS"
- for script in "${scripts[@]}"; do
- source "$script"
- done
-
- if [ -n "$RBENV_VERSION_ORIGIN" ]; then
- echo "$RBENV_VERSION_ORIGIN"
- elif [ -n "$RBENV_VERSION" ]; then
- echo "RBENV_VERSION environment variable"
- else
- rbenv-version-file
- fi
|