-
Notifications
You must be signed in to change notification settings - Fork 785
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Install should have --local
and --global
optional flags
#1745
Labels
Comments
You'll need a recent version of the Bash shell in your path to run the following script. #!/usr/bin/env bash
#
# @(#) asdf-install
#
# SYNOPSIS
#
# asdf-install [-C WORK-DIR] [--local | -l] PLUGIN [VERSION]
#
# Options:
# -C WORK-DIR Change to WORK-DIR before running asdf.
# --local, -l Install plugin in local scope.
#
# If VERSION is omitted, then the latest PLUGIN is installed.
# If VERSION is under-specified - e.g., nodejs 20 - then the
# latest iteration of that VERSION is installed.
#
: ${ASDF_CMD:='asdf'}
: ${CAT_CMD:='@CAT_CMD@'}
: ${GETOPT_CMD:='@GETOPT_CMD@'}
: ${READLINK_CMD:='@READLINK_CMD@'}
usage ()
{
$CAT_CMD >&2 <<EOF
Usage: ${script_name} [-C WORK-DIR] [--local | -l] PLUGIN [VERSION]
Options:
-C WORK-DIR Change to WORK-DIR before running asdf.
--help, -h Print (this) help, then exit.
--global, -g Install plugin in global scope (default).
--local, -l Install plugin in local scope.
If VERSION is omitted, then the latest PLUGIN is installed. If VERSION
is under-specified - e.g., nodejs 20 - then the latest iteration of
that VERSION is installed.
EOF
}
# OS-agnstoic readlink for existent files/directories.
resolve-existing ()
{
case $($READLINK_CMD --version 2>&1) in
*coreutils*)
$READLINK_CMD -e "$@"
;;
*)
$READLINK_CMD -f N "$@"
;;
esac
}
install-asdf-plugin ()
{
local -n params=$1
local latest_version=''
local status=''
latest_version=$($ASDF_CMD latest "${params[plugin]}" "${params[version]}") || return $?
pushd "${params[workdir]}" >/dev/null || return $?
trap 'popd >/dev/null' RETURN
$ASDF_CMD install "${params[plugin]}" "$latest_version" >&2 || return $?
$ASDF_CMD "${params[scope]}" "${params[plugin]}" "$latest_version" >&2 || return $?
popd >/dev/null
trap - RETURN
}
parse-command-line ()
{
local -n params=$1
local args
local optarg
local -r shortopts=hC:gl
local -r longopts=help,global,local
shift
if ! args=$(
$GETOPT_CMD --shell bash --options "$shortopts" \
--longoptions "$longopts" --name "$script_name" -- "$@"
); then
usage
return 1
fi
eval set -- "$args"
unset args
while true; do
case $1 in
--help|-h)
usage
exit
;;
-C)
if test ! -d "$2"; then
usage
return 2
fi
params[workdir]=$2
shift
;;
--global|-g)
params[scope]=global
;;
--local|-l)
params[scope]=local
;;
--)
shift
break
;;
*)
usage
return 3
;;
esac
shift
done
if (( $# < 1 || 2 < $# )); then
usage
return 4
fi
params[plugin]=$1
params[version]=$2
}
if test ."$0" = ."${BASH_SOURCE[0]}"; then
declare script=''
declare script_name=''
script=$(resolve-existing "$0") || exit $?
script_name=${script##*/}
declare -A parameters=(
[plugin]=''
[version]=''
[workdir]=$PWD
[scope]=global
)
parse-command-line parameters "$@" || exit $?
install-asdf-plugin parameters
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Is your feature request related to a problem? Please describe
[I'm always frustrated when] installing a new addon and have to run
asdf install <plugin> <version>
andasdf global <plugin> <version>
Describe the proposed solution
[I would like to see] an optional
--local
and--global
flag added to theasdf install
command which will automatically set the local or global versions for the selected tool.For example:
asdf install --global golang 1.19.1
would Install golang 1.19.1 and set it as the global default.asdf install --local ruby 2.6.4
would install ruby 2.6.4 and set the local tool-versions file to use that version.Describe similar
asdf
features and why they are not sufficientASDF currently has all these functions, but this change would make it easier to use.
Describe other workarounds you've considered
Run both
asdf install ...
andasdf global/local ...
commands.The text was updated successfully, but these errors were encountered: