Skip to content

Commit 3e8fa1c

Browse files
committed
fix all tests for the new feature
1 parent 5425946 commit 3e8fa1c

File tree

1 file changed

+67
-29
lines changed

1 file changed

+67
-29
lines changed

src/main/bash/sdkman-use.sh

Lines changed: 67 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -24,36 +24,74 @@ function __sdk_use() {
2424
__sdkman_check_version_present "$version" || return 1
2525
__sdkman_check_candidate_present "$candidate" || return 1
2626

27-
if [[ ! -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${version}" ]]; then
28-
echo ""
29-
__sdkman_echo_red "Stop! Candidate version is not installed."
30-
echo ""
31-
__sdkman_echo_yellow "Tip: Run the following to install this version"
32-
echo ""
33-
__sdkman_echo_yellow "$ sdk install ${candidate} ${version}"
34-
return 1
35-
fi
36-
37-
# Just update the *_HOME and PATH for this shell.
38-
__sdkman_set_candidate_home "$candidate" "$version"
39-
40-
if [[ $PATH =~ ${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+) ]]; then
41-
local matched_version
42-
43-
if [[ "$zsh_shell" == "true" ]]; then
44-
matched_version=${match[1]}
27+
major_version=$(echo $version | cut -d. -f1)
28+
if [[ "$major_version" == "$version" ]]; then
29+
count=0
30+
31+
for dir in "${SDKMAN_CANDIDATES_DIR}/${candidate}"/*; do
32+
if [ -d "$dir" ] && [[ "$(basename "$dir")" == "${major_version}"* ]];
33+
then
34+
((count++))
35+
fi
36+
done
37+
if [[ ${count} -eq 0 ]]
38+
then
39+
echo ""
40+
__sdkman_echo_red "Stop! No matching version found."
41+
echo ""
42+
elif [[ ${count} -eq 1 ]]
43+
then
44+
version=$(basename $(ls -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${major_version}"*))
45+
if [[ $PATH =~ ${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+) ]]; then
46+
local matched_version
47+
48+
if [[ "$zsh_shell" == "true" ]]; then
49+
matched_version=${match[1]}
50+
else
51+
matched_version=${BASH_REMATCH[1]}
52+
fi
53+
54+
export PATH=${PATH//${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${matched_version}/${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${version}}
55+
fi
56+
__sdkman_echo_green "Using ${candidate} version ${version} in this shell."
4557
else
46-
matched_version=${BASH_REMATCH[1]}
58+
echo ""
59+
__sdkman_echo_red "Stop! Cannot decide which version to use."
60+
echo ""
61+
__sdkman_echo_yellow
62+
fi
63+
else
64+
if [[ ! -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${version}" ]]; then
65+
echo ""
66+
__sdkman_echo_red "Stop! Candidate version is not installed."
67+
echo ""
68+
__sdkman_echo_yellow "Tip: Run the following to install this version"
69+
echo ""
70+
__sdkman_echo_yellow "$ sdk install ${candidate} ${version}"
71+
return 1
4772
fi
48-
49-
export PATH=${PATH//${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${matched_version}/${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${version}}
50-
fi
51-
52-
if [[ ! (-L "${SDKMAN_CANDIDATES_DIR}/${candidate}/current" || -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/current") ]]; then
53-
__sdkman_echo_green "Setting ${candidate} version ${version} as default."
54-
__sdkman_link_candidate_version "$candidate" "$version"
73+
74+
# Just update the *_HOME and PATH for this shell.
75+
__sdkman_set_candidate_home "$candidate" "$version"
76+
77+
if [[ $PATH =~ ${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+) ]]; then
78+
local matched_version
79+
80+
if [[ "$zsh_shell" == "true" ]]; then
81+
matched_version=${match[1]}
82+
else
83+
matched_version=${BASH_REMATCH[1]}
84+
fi
85+
86+
export PATH=${PATH//${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${matched_version}/${SDKMAN_CANDIDATES_DIR}\/${candidate}\/${version}}
87+
fi
88+
89+
if [[ ! (-L "${SDKMAN_CANDIDATES_DIR}/${candidate}/current" || -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/current") ]]; then
90+
__sdkman_echo_green "Setting ${candidate} version ${version} as default."
91+
__sdkman_link_candidate_version "$candidate" "$version"
92+
fi
93+
94+
echo ""
95+
__sdkman_echo_green "Using ${candidate} version ${version} in this shell."
5596
fi
56-
57-
echo ""
58-
__sdkman_echo_green "Using ${candidate} version ${version} in this shell."
5997
}

0 commit comments

Comments
 (0)