Allowing find the closest version if the exact version is not found

This commit is contained in:
Bruno Cardoso 2024-07-20 11:06:57 +01:00
parent ccdd47df9b
commit 5c69d8d852
3 changed files with 38 additions and 2 deletions

View File

@ -53,9 +53,13 @@ version_command() {
fi
if ! (check_if_version_exists "$plugin_name" "$version"); then
closest_version=$(try_get_closest_version "$plugin_name" "$version")
if [[ ! $closest_version ]]; then
version_not_installed_text "$plugin_name" "$version" 1>&2
exit 1
fi
version="$closest_version"
fi
resolved_versions+=("$version")
done

View File

@ -137,6 +137,26 @@ check_if_version_exists() {
fi
}
try_get_closest_version() {
local plugin_name=$1
local partial_version=$2
local versions
versions=$(list_installed_versions "$plugin_name")
if [ -n "${versions}" ]; then
for version in $versions; do
if [[ $version == $partial_version* ]]; then
matched_versions+=("$version")
fi
done
fi
if [ ${#matched_versions[@]} -eq 1 ]; then
printf "%s" "${matched_versions[0]}"
fi
}
version_not_installed_text() {
local plugin_name=$1
local version=$2

View File

@ -204,6 +204,18 @@ teardown() {
[ "$(cat "$HOME/.tool-versions")" = "dummy 1.1.0" ]
}
@test "global should create a global .tool-versions file when a close version is found" {
run asdf global "dummy" "1.1"
[ "$status" -eq 0 ]
[ "$(cat "$HOME/.tool-versions")" = "dummy 1.1.0" ]
}
@test "global should emit an error when a single close plugin version is found" {
run asdf global "dummy" "1"
[ "$status" -eq 1 ]
[ "$output" = "version 1 is not installed for dummy" ]
}
@test "[global - dummy_plugin] with latest should use the latest installed version" {
run asdf global "dummy" "latest"
[ "$status" -eq 0 ]