pyenv/libexec/rbenv-help
Mislav Marohnić b8715bfee6 foundation for a help system where each command holds its own docs
Docs are comprised from "Usage", "Summary" and "Help" sections, where
"Help" can span multiple commented lines. If it is missing, "Summary" is
shown in its place.

References #204, references #206
2012-12-13 05:48:28 +01:00

113 lines
3.1 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
[ -n "$RBENV_DEBUG" ] && set -x
# content from single commented line marked with a word such as "Usage" or "Summary"
extract_line() {
grep "^# ${1}:" "$2" | head -1 | cut -d ' ' -f3-
}
# content of multiple consecutive commented lines starting with a word such as "Help"
extract_section() {
sed -En "/^# ${1}: /,/^[^#]/s/^# ?//p" "$2" | sed "1s/${1}: //"
}
# print aligned command names with help summary
print_summary() {
if [ ! -h "$1" ]; then
local summary=$(extract_line Summary "$1")
if [ -n "$summary" ]; then
local name=$(basename "$1")
echo "${name#rbenv-}" | awk '{ printf " %-14s ", $1 }'
echo -n $summary
echo
else
return 1
fi
fi
}
print_help() {
local usage="$(extract_line Usage "$1")"
local halp="$(extract_section Help "$1")"
[ -z "$halp" ] && halp="$(extract_line Summary "$1")"
if [ -n "$usage" ]; then
echo usage: $usage
[ -n "$halp" ] && echo && echo "$halp"
else
echo "Sorry, this command isn't documented yet." >&2
return 1
fi
}
print_summaries() {
for command in $1; do
print_summary "$(command -v rbenv-"$command")"
done
}
print_set_version() {
echo "<version> should be a string matching a Ruby version known by rbenv."
local versions="$(rbenv-versions --bare)"
if [ -z "$versions" ]; then
echo "There are currently no Ruby versions installed for rbenv."
else
echo "The currently installed Ruby versions are:"
echo "$versions" | sed 's/^/ /'
fi
echo
echo "The special version string 'system' will use your default system Ruby."
}
case "$1" in
"") echo "usage: rbenv <command> [<args>]
Some useful rbenv commands are:
$(print_summaries "commands rehash global local shell version versions which whence")
See 'rbenv help <command>' for information on a specific command.
For full documentation, see: https://github.com/sstephenson/rbenv#readme"
;;
global) echo "usage: rbenv global <version>
Sets the global Ruby version. You can override the global version at
any time by setting a directory-specific version with \`rbenv local'
or by setting the RBENV_VERSION environment variable.
$(print_set_version)"
;;
local) echo "usage: rbenv local <version>
rbenv local --unset
Sets the local directory-specific Ruby version by writing the version
name to a file named '.rbenv-version'.
When you run a Ruby command, rbenv will look for an '.rbenv-version'
file in the current directory and each parent directory. If no such
file is found in the tree, rbenv will use the global Ruby version
specified with \`rbenv global', or the version specified in the
RBENV_VERSION environment variable.
$(print_set_version)"
;;
shell) echo "usage: rbenv shell <version>
rbenv shell --unset
Sets a shell-specific Ruby version by setting the 'RBENV_VERSION'
environment variable in your shell. This version overrides both
project-specific versions and the global version.
$(print_set_version)"
;;
*)
command_path="$(command -v "rbenv-$1" || true)"
if [ -n "$command_path" ]; then
print_help "$command_path"
else
echo "rbenv: no such command \`$1'" >&2
exit 1
fi
esac