asdf/lib/commands/reshim.sh

106 lines
3.2 KiB
Bash
Raw Normal View History

2015-05-17 00:46:56 -07:00
reshim_command() {
local package_name=$1
local full_version=$2
2015-05-17 06:32:47 -07:00
local executable_path=$3
2015-05-17 11:20:51 -07:00
local plugin_path=$(get_plugin_path $package_name)
check_if_plugin_exists $plugin_path
2015-05-17 00:46:56 -07:00
ensure_shims_dir
# If full version is empty then generate shims for all versions in the package
2015-05-17 06:32:47 -07:00
if [ "$full_version" != "" ] && [ "$executable_path" != "" ]; then
generate_shim_for_executable $package_name $full_version $executable_path
elif [ "$full_version" != "" ]; then
# generate for the whole package version
generate_shims_for_version $package_name $full_version
else
# generate for all versions of the package
local package_installs_path=$(asdf_dir)/installs/${package_name}
2015-05-17 00:46:56 -07:00
for install in ${package_installs_path}/*/; do
local full_version_name=$(echo $(basename $install) | sed 's/tag\-/tag\:/' | sed 's/commit-/commit:/')
generate_shims_for_version $package_name $full_version_name
done
fi
}
2015-05-10 10:25:42 -07:00
2015-05-11 09:43:24 -07:00
ensure_shims_dir() {
# Create shims dir if doesn't exist
2015-05-17 03:47:45 -07:00
if [ ! -d $(asdf_dir)/shims ]; then
2015-05-11 09:43:24 -07:00
mkdir $(asdf_dir)/shims
fi
}
2015-05-10 10:25:42 -07:00
2015-05-11 09:43:24 -07:00
write_shim_script() {
2015-05-11 09:48:57 -07:00
local package_name=$1
2015-05-11 09:43:24 -07:00
local version=$2
local executable_path=$3
local shim_path=$(asdf_dir)/shims/$(basename $executable_path)
echo """#!/usr/bin/env sh
2015-05-17 10:28:49 -07:00
$(asdf_dir)/bin/private/asdf-exec ${package_name} ${executable_path} \"\$@\"
2015-05-11 09:43:24 -07:00
""" > $shim_path
chmod +x $shim_path
}
2015-05-17 06:32:47 -07:00
generate_shim_for_executable() {
local package_name=$1
local full_version=$2
local executable=$3
2015-05-17 11:20:51 -07:00
local plugin_path=$(get_plugin_path $package_name)
2015-05-17 06:32:47 -07:00
2015-05-17 11:20:51 -07:00
check_if_plugin_exists $plugin_path
2015-05-17 06:32:47 -07:00
IFS=':' read -a version_info <<< "$full_version"
if [ "${version_info[0]}" = "tag" ] || [ "${version_info[0]}" = "commit" ]; then
local install_type="${version_info[0]}"
local version="${version_info[1]}"
else
local install_type="version"
local version="${version_info[0]}"
fi
write_shim_script $package_name $version $executable
}
2015-05-11 09:43:24 -07:00
generate_shims_for_version() {
2015-05-11 09:48:57 -07:00
local package_name=$1
2015-05-11 09:43:24 -07:00
local full_version=$2
2015-05-17 11:20:51 -07:00
local plugin_path=$(get_plugin_path $package_name)
check_if_plugin_exists $plugin_path
2015-05-10 10:25:42 -07:00
2015-05-11 09:43:24 -07:00
IFS=':' read -a version_info <<< "$full_version"
2015-05-17 03:47:45 -07:00
if [ "${version_info[0]}" = "tag" ] || [ "${version_info[0]}" = "commit" ]; then
2015-05-11 09:43:24 -07:00
local install_type="${version_info[0]}"
local version="${version_info[1]}"
else
local install_type="version"
local version="${version_info[0]}"
fi
2015-05-10 10:25:42 -07:00
2015-05-17 06:32:47 -07:00
local install_path=$(get_install_path $package_name $install_type $version)
2015-05-17 11:20:51 -07:00
if [ -f ${plugin_path}/bin/list-bin-paths ]; then
local space_seperated_list_of_bin_paths=$(sh ${plugin_path}/bin/list-bin-paths $package_name $install_type $version "${@:2}")
else
local space_seperated_list_of_bin_paths="bin"
fi
2015-05-17 06:32:47 -07:00
IFS=' ' read -a all_bin_paths <<< "$space_seperated_list_of_bin_paths"
2015-05-11 09:43:24 -07:00
2015-05-17 06:32:47 -07:00
for bin_path in "${all_bin_paths[@]}"; do
#TODO check if it's actually an executable file
for executable_file in $install_path/$bin_path/*; do
2015-05-17 06:38:05 -07:00
# because just $executable_file gives absolute path; We don't want version hardcoded in shim
local executable_path_relative_to_install_path=$bin_path/$(basename $executable_file)
write_shim_script $package_name $version $executable_path_relative_to_install_path
2015-05-17 06:32:47 -07:00
done
2015-05-11 09:43:24 -07:00
done
}