# -*- sh -*- 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 command -v nproc >/dev/null 2>&1; then nproc elif command -v 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() { local plugins_path plugins_path=$(get_plugin_path) local search_path search_path=$(pwd) local some_tools_installed if ls "$plugins_path" &>/dev/null; then for plugin_path in "$plugins_path"/*; do local plugin_name plugin_name=$(basename "$plugin_path") local plugin_version_and_path plugin_version_and_path="$(find_versions "$plugin_name" "$search_path")" if [ -n "$plugin_version_and_path" ]; then local plugin_version some_tools_installed='yes' plugin_versions=$(cut -d '|' -f 1 <<<"$plugin_version_and_path") for plugin_version in $plugin_versions; do install_tool_version "$plugin_name" "$plugin_version" done fi done else echo "Install plugins first to be able to install tools" exit 1 fi if [ -z "$some_tools_installed" ]; then echo "Either specify a tool & version in the command" echo "OR add .tool-versions file in this directory" echo "or in a parent 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" if [ "$full_version" = "system" ]; then return fi 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" if [ "${version_info[0]}" = "latest" ]; then local version version=$(asdf latest "$plugin_name" "${version_info[1]}") full_version=$version else local version="${version_info[0]}" fi 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" asdf_run_hook "pre_asdf_install_${plugin_name}" "$full_version" bash "${plugin_path}"/bin/install ) local exit_code=$? if [ $exit_code -eq 0 ]; then asdf reshim "$plugin_name" "$full_version" asdf_run_hook "post_asdf_install_${plugin_name}" "$full_version" else handle_failure "$install_path" fi fi } install_command "$@"