mirror of
https://github.com/asdf-vm/asdf.git
synced 2024-11-15 09:38:16 -07:00
109 lines
2.6 KiB
Bash
109 lines
2.6 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
handle_failure() {
|
|
local install_path="$1"
|
|
rm -rf "$install_path"
|
|
exit 1
|
|
}
|
|
|
|
handle_cancel() {
|
|
local install_path="$1"
|
|
echo -e "\nreceived sigint, cleaning up"
|
|
handle_failure "$install_path"
|
|
}
|
|
|
|
install_command() {
|
|
local plugin_name=$1
|
|
local full_version=$2
|
|
|
|
if [ "$plugin_name" = "" ] && [ "$full_version" = "" ]; then
|
|
install_local_tool_versions
|
|
elif [[ $# -eq 1 ]]; then
|
|
display_error "You must specify a name and a version to install"
|
|
exit 1
|
|
else
|
|
install_tool_version "$plugin_name" "$full_version"
|
|
fi
|
|
}
|
|
|
|
get_concurrency() {
|
|
if which nproc > /dev/null 2>&1; then
|
|
nproc
|
|
elif which sysctl > /dev/null 2>&1 && sysctl hw.ncpu > /dev/null 2>&1; then
|
|
sysctl -n hw.ncpu
|
|
elif [ -f /proc/cpuinfo ]; then
|
|
grep -c processor /proc/cpuinfo
|
|
else
|
|
echo "1"
|
|
fi
|
|
}
|
|
|
|
install_local_tool_versions() {
|
|
if [ -f "$(pwd)/.tool-versions" ]; then
|
|
local asdf_versions_path
|
|
asdf_versions_path="$(pwd)/.tool-versions"
|
|
|
|
while read -r tool_line; do
|
|
IFS=' ' read -r -a tool_info <<< "$tool_line"
|
|
local tool_name
|
|
tool_name=$(echo "${tool_info[0]}" | xargs)
|
|
local tool_version
|
|
tool_version=$(echo "${tool_info[1]}" | xargs)
|
|
|
|
if ! [[ -z "$tool_name" || -z "$tool_version" ]]; then
|
|
install_tool_version "$tool_name" "$tool_version"
|
|
fi
|
|
done < "$asdf_versions_path"
|
|
else
|
|
echo "Either specify a tool & version in the command"
|
|
echo "OR add .tool-versions file in this directory"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
|
|
install_tool_version() {
|
|
local plugin_name=$1
|
|
local full_version=$2
|
|
local plugin_path
|
|
plugin_path=$(get_plugin_path "$plugin_name")
|
|
check_if_plugin_exists "$plugin_name"
|
|
|
|
|
|
IFS=':' read -r -a version_info <<< "$full_version"
|
|
if [ "${version_info[0]}" = "ref" ]; then
|
|
local install_type="${version_info[0]}"
|
|
local version="${version_info[1]}"
|
|
else
|
|
local install_type="version"
|
|
local version="${version_info[0]}"
|
|
fi
|
|
|
|
|
|
local install_path
|
|
install_path=$(get_install_path "$plugin_name" "$install_type" "$version")
|
|
local concurrency
|
|
concurrency=$(get_concurrency)
|
|
trap 'handle_cancel $install_path' INT
|
|
|
|
if [ -d "$install_path" ]; then
|
|
echo "$plugin_name $full_version is already installed"
|
|
else
|
|
(
|
|
export ASDF_INSTALL_TYPE=$install_type
|
|
export ASDF_INSTALL_VERSION=$version
|
|
export ASDF_INSTALL_PATH=$install_path
|
|
export ASDF_CONCURRENCY=$concurrency
|
|
mkdir "$install_path"
|
|
bash "${plugin_path}"/bin/install
|
|
)
|
|
|
|
local exit_code=$?
|
|
if [ $exit_code -eq 0 ]; then
|
|
reshim_command "$plugin_name" "$full_version"
|
|
else
|
|
handle_failure "$install_path"
|
|
fi
|
|
fi
|
|
}
|