asdf/lib/utils.sh

205 lines
4.6 KiB
Bash

asdf_version() {
echo "0.1"
}
asdf_dir() {
if [ -z $ASDF_DIR ]; then
local current_script_path=${BASH_SOURCE[0]}
export ASDF_DIR=$(cd $(dirname $(dirname $current_script_path)); echo $(pwd))
fi
echo $ASDF_DIR
}
get_install_path() {
local plugin=$1
local install_type=$2
local version=$3
mkdir -p $(asdf_dir)/installs/${plugin}
if [ $install_type = "version" ]
then
echo $(asdf_dir)/installs/${plugin}/${version}
else
echo $(asdf_dir)/installs/${plugin}/${install_type}-${version}
fi
}
get_source_compile_path() {
local plugin=$1
local install_type=$2
local version=$3
mkdir -p $(asdf_dir)/sources/${plugin}
if [ $install_type = "version" ]
then
echo $(asdf_dir)/sources/${plugin}/${version}
else
echo $(asdf_dir)/sources/${plugin}/${install_type}-${version}
fi
}
check_if_plugin_exists() {
if [ ! -d $1 ]
then
display_error "No such plugin"
exit 1
fi
}
check_if_version_exists() {
local plugin=$1
local version=$2
local version_dir=$(asdf_dir)/installs/$plugin/$version
if [ ! -d $version_dir ]; then
display_error "version $version is not installed for $plugin"
exit 1
fi
}
get_version_part() {
IFS='@' read -a version_info <<< "$1"
echo ${version_info[$2]}
}
get_plugin_path() {
echo $(asdf_dir)/plugins/$1
}
display_error() {
echo $1
}
get_asdf_versions_file_path() {
local asdf_tool_versions_path=""
local search_path=$(pwd)
while [ "$search_path" != "/" ]; do
if [ -f "$search_path/.tool-versions" ]; then
asdf_tool_versions_path="$search_path/.tool-versions"
break
fi
search_path=$(dirname "$search_path")
done
echo $asdf_tool_versions_path
}
get_preset_version_for() {
local tool_name=$1
local asdf_versions_path=$(get_asdf_versions_file_path)
local matching_tool_version=""
local legacy_version_file_support=$(get_asdf_config_value "legacy_version_file")
# If .tool-versions is not in the working directory
if [ "$asdf_versions_path" != "$(pwd)/.tool-versions" ] && [ "$legacy_version_file_support" = "yes" ]; then
# Check for legacy version file
matching_tool_version=$(get_tool_version_from_legacy_file $tool_name $(pwd))
fi
# If no legacy version file, see if we can use a .tool-versions file higher in the directory tree
if [ "$matching_tool_version" = "" ] && [ "$asdf_versions_path" != "" ]; then
matching_tool_version=$(get_tool_version_from_file $asdf_versions_path $tool_name)
fi
# If there's no global .tool-versions file
# then we create it and return blank
if [ "$matching_tool_version" = "" ]; then
local global_tool_versions_path=$HOME/.tool-versions
if [ ! -f $global_tool_versions_path ]; then
touch $global_tool_versions_path
else
matching_tool_version=$(get_tool_version_from_file $global_tool_versions_path $tool_name)
fi
fi
echo $matching_tool_version
}
get_tool_version_from_file() {
local asdf_versions_path=$1
local tool_name=$2
local get_all_versions=$3
local matching_tool_version=""
local read_done=false
until $read_done; do
read tool_line || read_done=true
if $read_done ; then
break;
fi
IFS=' ' read -a tool_info <<< $tool_line
local t_name=$(echo "${tool_info[0]}" | xargs)
local t_version=$(echo "${tool_info[@]:1}" | xargs)
if [ "$t_name" = "$tool_name" ]
then
matching_tool_version=$t_version
break;
fi
done < $asdf_versions_path
echo $matching_tool_version
}
get_tool_version_from_legacy_file() {
local plugin_name=$1
local directory=$2
local legacy_tool_version=""
local plugin_path=$(get_plugin_path $plugin_name)
local legacy_version_script="${plugin_path}/bin/get-version-from-legacy-file"
check_if_plugin_exists $plugin_path
if [ -f $legacy_version_script ]; then
local legacy_tool_version=$(bash $legacy_version_script $directory)
fi
# Should return the version/tag/commit/branch/path
echo $legacy_tool_version
}
get_asdf_config_value_from_file() {
local config_path=$1
local key=$2
if [ ! -f $config_path ]; then
return 0
fi
local result=$(grep -E "^\s*$key\s*=" $config_path | awk -F '=' '{ gsub(/ /, "", $2); print $2 }')
if [ -n "$result" ]; then
echo $result
fi
}
get_asdf_config_value() {
local key=$1
local config_path=${AZDF_CONFIG_FILE:-"$HOME/.asdfrc"}
local default_config_path=${AZDF_CONFIG_DEFAULT_FILE:-"$(asdf_dir)/defaults"}
local result=$(get_asdf_config_value_from_file $config_path $key)
if [ -n "$result" ]; then
echo $result
else
get_asdf_config_value_from_file $default_config_path $key
fi
}