Skip to content

Commit

Permalink
feat(latest): adds the flag --all to the latest command
Browse files Browse the repository at this point in the history
As discussed in asdf-vm#1036, this patch adds a `--all` flag to the latest
command which will show the list of plugins, their latest version and if
this one is installed or not.

This patch basically reuses the logic used in the list command and the
latest command. The main different is the removal of the query
paramenter as different plugins might need different queries.
  • Loading branch information
threkk committed Nov 16, 2021
1 parent 4b93bc8 commit 461f8f2
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
49 changes: 49 additions & 0 deletions lib/commands/command-latest.bash
Expand Up @@ -7,6 +7,10 @@ latest_command() {
local query=$2
local plugin_path

if [ "$plugin_name" == "--all" ]; then
latest_all
fi

[[ -z $query ]] && query="$DEFAULT_QUERY"

plugin_path=$(get_plugin_path "$plugin_name")
Expand Down Expand Up @@ -35,4 +39,49 @@ latest_command() {
printf "%s\n" "$versions"
}

latest_all() {
local plugins_path
plugins_path=$(get_plugin_path)

if ls "$plugins_path" &>/dev/null; then
for plugin_path in "$plugins_path"/*; do
plugin_name=$(basename "$plugin_path")

# Retrieve the version of the plugin
local version
if [ -f "${plugin_path}/bin/latest-stable" ]; then
# We can't filter by a concrete query because different plugins might
# have different queries.
version=$("${plugin_path}"/bin/latest-stable "")
if [ -z "${version}" ]; then
version="unknown"
fi
else
# pattern from xxenv-latest (https://github.com/momo-lab/xxenv-latest)
version=$(asdf list-all "$plugin_name" |
grep -vE "(^Available version:|-src|-dev|-latest|-stm|[-\\.]rc|-alpha|-beta|[-\\.]pre|-next|(a|b|c)[0-9]+|snapshot|master)" |
sed 's/^[[:space:]]\+//' |
tail -1)
if [ -z "${version}" ]; then
version="unknown"
fi
fi

local installed_status
installed_status="missing"

local installed_versions
installed_versions=$(list_installed_versions "$plugin_name")

if ! printf '%s\n' "$installed_versions" | grep -q "^$version\$"; then
installed_status="installed"
fi
printf "%s\\t%s\\t%s\\n" "$plugin_name" "$version" "$installed_status"
done
else
printf "%s\\n" 'No plugins installed'
fi
exit 0
}

latest_command "$@"
9 changes: 9 additions & 0 deletions test/latest_command.bats
Expand Up @@ -59,3 +59,12 @@ teardown() {
[ "$(echo "No compatible versions available (legacy-dummy 3)")" == "$output" ]
[ "$status" -eq 1 ]
}

################################
#### latest --all ####
################################
@test "[latest_command - all plugins] shows the latest stable version of all plugins" {
run asdf latest --all
[ "$(echo -e "dummy\t2.0.0\tinstalled\nlegacy-dummy\t2.0.0\tinstalled\n")" == "$output" ]
[ "$status" -eq 0 ]
}

0 comments on commit 461f8f2

Please sign in to comment.