asdf/lib/commands/reshim.sh
Robin Schneider 7c30e6f9d2
Fix typo: seperated → separated
Automated edit command: git ls-files -z "$(git rev-parse --show-toplevel)" | xargs --null -I '{}' find '{}' -type f -print0 | xargs --null sed --in-place --regexp-extended 's/seperated/separated/g;'
2017-02-20 19:44:44 +01:00

122 lines
3.4 KiB
Bash

shim_command() {
local plugin_name=$1
local executable_path=$2
local plugin_path=$(get_plugin_path $plugin_name)
check_if_plugin_exists $plugin_name
ensure_shims_dir
generate_shim_for_executable $plugin_name $executable_path
}
reshim_command() {
local plugin_name=$1
local full_version=$2
local plugin_path=$(get_plugin_path $plugin_name)
check_if_plugin_exists $plugin_name
ensure_shims_dir
if [ "$full_version" != "" ]; then
# generate for the whole package version
generate_shims_for_version $plugin_name $full_version
else
# generate for all versions of the package
local plugin_installs_path=$(asdf_dir)/installs/${plugin_name}
for install in ${plugin_installs_path}/*/; do
local full_version_name=$(echo $(basename $install) | sed 's/ref\-/ref\:/')
generate_shims_for_version $plugin_name $full_version_name
done
fi
}
ensure_shims_dir() {
# Create shims dir if doesn't exist
if [ ! -d $(asdf_dir)/shims ]; then
mkdir $(asdf_dir)/shims
fi
}
write_shim_script() {
local plugin_name=$1
local executable_path=$2
local executable_name=$(basename $executable_path)
local plugin_shims_path=$(get_plugin_path $plugin_name)/shims
local shim_path=$(asdf_dir)/shims/$executable_name
if [ -f $plugin_shims_path/$executable_name ]; then
cp $plugin_shims_path/$executable_name $shim_path
else
cat <<EOF > $shim_path
#!/usr/bin/env bash
# asdf-plugin: ${plugin_name}
exec $(asdf_dir)/bin/private/asdf-exec ${plugin_name} ${executable_path} "\$@"
EOF
fi
chmod +x $shim_path
}
generate_shim_for_executable() {
local plugin_name=$1
local executable=$2
local plugin_path=$(get_plugin_path $plugin_name)
check_if_plugin_exists $plugin_name
IFS=':' read -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
write_shim_script $plugin_name $executable
}
generate_shims_for_version() {
local plugin_name=$1
local full_version=$2
local plugin_path=$(get_plugin_path $plugin_name)
check_if_plugin_exists $plugin_name
IFS=':' read -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=$(get_install_path $plugin_name $install_type $version)
if [ -f ${plugin_path}/bin/list-bin-paths ]; then
local space_separated_list_of_bin_paths=$(
export ASDF_INSTALL_TYPE=$install_type
export ASDF_INSTALL_VERSION=$version
export ASDF_INSTALL_PATH=$install_path
bash ${plugin_path}/bin/list-bin-paths
)
else
local space_separated_list_of_bin_paths="bin"
fi
IFS=' ' read -a all_bin_paths <<< "$space_separated_list_of_bin_paths"
for bin_path in "${all_bin_paths[@]}"; do
for executable_file in $install_path/$bin_path/*; do
# 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)
if [ -x "$executable_file" ]; then
write_shim_script $plugin_name $executable_path_relative_to_install_path
fi
done
done
}