From 08ff08e0438e91aec50929bb3479d28db6f5b780 Mon Sep 17 00:00:00 2001 From: Marcos Pereira Date: Mon, 11 Jan 2021 11:11:19 -0500 Subject: [PATCH] Support multiple sdkman output formats sdkman has a specific output format for Java candidate since there are multiple vendors and builds. For example, when running `sdk list maven`, the format is a simple list like: 3.6.2 3.6.1 3.6.0 3.5.4 3.5.3 3.5.2 3.5.0 3.3.9 But for `sbt list java`, the output is a table like: ================================================================================ Vendor | Use | Version | Dist | Status | Identifier -------------------------------------------------------------------------------- AdoptOpenJDK | | 15.0.1.j9 | adpt | | 15.0.1.j9-adpt | | 15.0.1.hs | adpt | installed | 15.0.1.hs-adpt ... Amazon | | 15.0.1 | amzn | | 15.0.1-amzn | | 11.0.9 | amzn | | 11.0.9-amzn ... Azul Zulu | | 15.0.1 | zulu | | 15.0.1-zulu | | 15.0.1.fx | zulu | | 15.0.1.fx-zulu ... Therefore, the completion script has to handle both formats. --- completion/available/sdkman.completion.bash | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/completion/available/sdkman.completion.bash b/completion/available/sdkman.completion.bash index 16affe8d..7f0157f3 100644 --- a/completion/available/sdkman.completion.bash +++ b/completion/available/sdkman.completion.bash @@ -59,8 +59,18 @@ _sdkman_candidate_all_versions() { if [ "$SDKMAN_OFFLINE_MODE" = "true" ]; then CANDIDATE_VERSIONS=$CANDIDATE_LOCAL_VERSIONS else - CANDIDATE_ONLINE_VERSIONS="$(__sdkman_list_versions "$1" | grep " " | grep "\." | cut -c 62-)" - CANDIDATE_VERSIONS="$(echo "$CANDIDATE_ONLINE_VERSIONS $CANDIDATE_LOCAL_VERSIONS" | tr ' ' '\n' | sort | uniq -u) " + # sdkman has a specific output format for Java candidate since + # there are multiple vendors and builds. + if [ "$candidate" = "java" ]; then + CANDIDATE_ONLINE_VERSIONS="$(__sdkman_list_versions "$candidate" | grep " " | grep "\." | cut -c 62-)" + else + CANDIDATE_ONLINE_VERSIONS="$(__sdkman_list_versions "$candidate" | grep " " | grep "\." | cut -c 6-)" + fi + # the last grep is used to filter out sdkman flags, such as: + # "+" - local version + # "*" - installed + # ">" - currently in use + CANDIDATE_VERSIONS="$(echo "$CANDIDATE_ONLINE_VERSIONS $CANDIDATE_LOCAL_VERSIONS" | tr ' ' '\n' | grep -v -e '^[[:space:]|\*|\>|\+]*$' | sort | uniq -u) " fi }