mirror of
https://github.com/sdkman/sdkman-cli.git
synced 2026-01-31 09:43:04 -05:00
Steps toward decreasing state leakage in __sdkman_determine_version function.
This commit is contained in:
@@ -42,16 +42,20 @@ function __sdkman_check_version_present {
|
||||
}
|
||||
|
||||
function __sdkman_determine_version {
|
||||
local version="$1"
|
||||
local candidate version folder
|
||||
|
||||
if [[ "${SDKMAN_AVAILABLE}" == "false" && -n "$version" && -d "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/$version" ]]; then
|
||||
candidate="$1"
|
||||
version="$2"
|
||||
folder="$3"
|
||||
|
||||
if [[ "${SDKMAN_AVAILABLE}" == "false" && -n "$version" && -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/$version" ]]; then
|
||||
VERSION="$version"
|
||||
|
||||
elif [[ "${SDKMAN_AVAILABLE}" == "false" && -z "$version" && -L "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/current" ]]; then
|
||||
VERSION=$(readlink "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/current" | sed "s!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/!!g")
|
||||
elif [[ "${SDKMAN_AVAILABLE}" == "false" && -z "$version" && -L "${SDKMAN_CANDIDATES_DIR}/${candidate}/current" ]]; then
|
||||
VERSION=$(readlink "${SDKMAN_CANDIDATES_DIR}/${candidate}/current" | sed "s!${SDKMAN_CANDIDATES_DIR}/${candidate}/!!g")
|
||||
|
||||
elif [[ "${SDKMAN_AVAILABLE}" == "false" && -n "$version" ]]; then
|
||||
echo "Stop! ${CANDIDATE} ${1} is not available while offline."
|
||||
echo "Stop! ${candidate} ${version} is not available while offline."
|
||||
return 1
|
||||
|
||||
elif [[ "${SDKMAN_AVAILABLE}" == "false" && -z "$version" ]]; then
|
||||
@@ -60,22 +64,22 @@ function __sdkman_determine_version {
|
||||
|
||||
elif [[ "${SDKMAN_AVAILABLE}" == "true" && -z "$version" ]]; then
|
||||
VERSION_VALID='valid'
|
||||
VERSION=$(curl -s "${SDKMAN_SERVICE}/candidates/${CANDIDATE}/default")
|
||||
VERSION=$(curl -s "${SDKMAN_SERVICE}/candidates/${candidate}/default")
|
||||
|
||||
else
|
||||
VERSION_VALID=$(curl -s "${SDKMAN_SERVICE}/candidates/${CANDIDATE}/$version")
|
||||
if [[ "${VERSION_VALID}" == 'valid' || "${VERSION_VALID}" == 'invalid' && -n "$2" ]]; then
|
||||
VERSION_VALID=$(curl -s "${SDKMAN_SERVICE}/candidates/${candidate}/$version")
|
||||
if [[ "${VERSION_VALID}" == 'valid' || "${VERSION_VALID}" == 'invalid' && -n "$folder" ]]; then
|
||||
VERSION="$version"
|
||||
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -h "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/$version" ]]; then
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -h "${SDKMAN_CANDIDATES_DIR}/${candidate}/$version" ]]; then
|
||||
VERSION="$version"
|
||||
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -d "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/$version" ]]; then
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/$version" ]]; then
|
||||
VERSION="$version"
|
||||
|
||||
else
|
||||
echo ""
|
||||
echo "Stop! $version is not a valid ${CANDIDATE} version."
|
||||
echo "Stop! $version is not a valid ${candidate} version."
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
@@ -16,21 +16,24 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
#todo: fix leaking state
|
||||
function __sdkman_default {
|
||||
#todo: fix leaking state
|
||||
CANDIDATE="$1"
|
||||
local candidate version
|
||||
|
||||
__sdkman_check_candidate_present "${CANDIDATE}" || return 1
|
||||
__sdkman_determine_version "$2" || return 1
|
||||
candidate="$1"
|
||||
version="$2"
|
||||
|
||||
if [ ! -d "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}" ]; then
|
||||
__sdkman_check_candidate_present "$candidate" || return 1
|
||||
__sdkman_determine_version "$candidate" "$version" || return 1
|
||||
|
||||
if [ ! -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}" ]; then
|
||||
echo ""
|
||||
echo "Stop! ${CANDIDATE} ${VERSION} is not installed."
|
||||
echo "Stop! ${candidate} ${VERSION} is not installed."
|
||||
return 1
|
||||
fi
|
||||
|
||||
__sdkman_link_candidate_version "${CANDIDATE}" "${VERSION}"
|
||||
__sdkman_link_candidate_version "${candidate}" "${VERSION}"
|
||||
|
||||
echo ""
|
||||
echo "Default ${CANDIDATE} version set to ${VERSION}"
|
||||
echo "Default ${candidate} version set to ${VERSION}"
|
||||
}
|
||||
|
||||
@@ -54,43 +54,44 @@ function __sdkman_validate_zip {
|
||||
fi
|
||||
}
|
||||
|
||||
#todo: fix leaking state
|
||||
function __sdkman_install {
|
||||
local CANDIDATE LOCAL_FOLDER
|
||||
local candidate version folder
|
||||
|
||||
#todo: fix leaking state
|
||||
CANDIDATE="$1"
|
||||
LOCAL_FOLDER="$3"
|
||||
candidate="$1"
|
||||
version="$2"
|
||||
folder="$3"
|
||||
|
||||
__sdkman_check_candidate_present "${CANDIDATE}" || return 1
|
||||
__sdkman_determine_version "$2" "$3" || return 1
|
||||
__sdkman_check_candidate_present "$candidate" || return 1
|
||||
__sdkman_determine_version "$candidate" "$version" "$folder" || return 1
|
||||
|
||||
if [[ -d "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}" || -h "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}" ]]; then
|
||||
if [[ -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}" || -h "${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}" ]]; then
|
||||
echo ""
|
||||
echo "Stop! ${CANDIDATE} ${VERSION} is already installed."
|
||||
echo "Stop! ${candidate} ${VERSION} is already installed."
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [[ ${VERSION_VALID} == 'valid' ]]; then
|
||||
__sdkman_install_candidate_version "${CANDIDATE}" "${VERSION}" || return 1
|
||||
__sdkman_install_candidate_version "${candidate}" "${VERSION}" || return 1
|
||||
|
||||
if [[ "${sdkman_auto_answer}" != 'true' ]]; then
|
||||
echo -n "Do you want ${CANDIDATE} ${VERSION} to be set as default? (Y/n): "
|
||||
echo -n "Do you want ${candidate} ${VERSION} to be set as default? (Y/n): "
|
||||
read USE
|
||||
fi
|
||||
if [[ -z "${USE}" || "${USE}" == "y" || "${USE}" == "Y" ]]; then
|
||||
echo ""
|
||||
echo "Setting ${CANDIDATE} ${VERSION} as default."
|
||||
__sdkman_link_candidate_version "${CANDIDATE}" "${VERSION}"
|
||||
__sdkman_add_to_path "${CANDIDATE}"
|
||||
echo "Setting ${candidate} ${VERSION} as default."
|
||||
__sdkman_link_candidate_version "${candidate}" "${VERSION}"
|
||||
__sdkman_add_to_path "${candidate}"
|
||||
fi
|
||||
return 0
|
||||
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -n "${LOCAL_FOLDER}" ]]; then
|
||||
__sdkman_install_local_version "${CANDIDATE}" "${VERSION}" "${LOCAL_FOLDER}" || return 1
|
||||
elif [[ "${VERSION_VALID}" == 'invalid' && -n "${folder}" ]]; then
|
||||
__sdkman_install_local_version "${candidate}" "${VERSION}" "${folder}" || return 1
|
||||
|
||||
else
|
||||
echo ""
|
||||
echo "Stop! $1 is not a valid ${CANDIDATE} version."
|
||||
echo "Stop! $1 is not a valid ${candidate} version."
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
@@ -16,49 +16,49 @@
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
#todo: fix leaking state
|
||||
function __sdkman_use {
|
||||
#todo: fix leaking state of CANDIDATE
|
||||
local CANDIDATE version
|
||||
local candidate version install
|
||||
|
||||
CANDIDATE="$1"
|
||||
candidate="$1"
|
||||
version="$2"
|
||||
__sdkman_check_candidate_present "${CANDIDATE}" || return 1
|
||||
__sdkman_determine_version "$version" || return 1
|
||||
__sdkman_check_candidate_present "$candidate" || return 1
|
||||
__sdkman_determine_version "$candidate" "$version" || return 1
|
||||
|
||||
if [[ ! -d "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}" ]]; then
|
||||
if [[ ! -d "${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}" ]]; then
|
||||
echo ""
|
||||
echo "Stop! ${CANDIDATE} ${VERSION} is not installed."
|
||||
echo "Stop! ${candidate} ${VERSION} is not installed."
|
||||
if [[ "${sdkman_auto_answer}" != 'true' ]]; then
|
||||
echo -n "Do you want to install it now? (Y/n): "
|
||||
read INSTALL
|
||||
read install
|
||||
fi
|
||||
if [[ -z "${INSTALL}" || "${INSTALL}" == "y" || "${INSTALL}" == "Y" ]]; then
|
||||
__sdkman_install_candidate_version "${CANDIDATE}" "${VERSION}"
|
||||
__sdkman_add_to_path "${CANDIDATE}"
|
||||
if [[ -z "${install}" || "${install}" == "y" || "${install}" == "Y" ]]; then
|
||||
__sdkman_install_candidate_version "${candidate}" "${VERSION}"
|
||||
__sdkman_add_to_path "${candidate}"
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
# Just update the *_HOME and PATH for this shell.
|
||||
__sdkman_set_candidate_home "${CANDIDATE}" "${VERSION}"
|
||||
__sdkman_set_candidate_home "${candidate}" "${VERSION}"
|
||||
|
||||
# Replace the current path for the candidate with the selected version.
|
||||
if [[ "${solaris}" == true ]]; then
|
||||
export PATH=$(echo $PATH | gsed -r "s!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}!g")
|
||||
export PATH=$(echo $PATH | gsed -r "s!${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}!g")
|
||||
|
||||
elif [[ "${darwin}" == true ]]; then
|
||||
export PATH=$(echo $PATH | sed -E "s!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}!g")
|
||||
export PATH=$(echo $PATH | sed -E "s!${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}!g")
|
||||
|
||||
else
|
||||
export PATH=$(echo $PATH | sed -r "s!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}!g")
|
||||
export PATH=$(echo $PATH | sed -r "s!${SDKMAN_CANDIDATES_DIR}/${candidate}/([^/]+)!${SDKMAN_CANDIDATES_DIR}/${candidate}/${VERSION}!g")
|
||||
fi
|
||||
|
||||
if [[ ! -h "${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/current" ]]; then
|
||||
echo "Setting ${CANDIDATE} version ${VERSION} as default."
|
||||
__sdkman_link_candidate_version "${CANDIDATE}" "${VERSION}"
|
||||
if [[ ! -h "${SDKMAN_CANDIDATES_DIR}/${candidate}/current" ]]; then
|
||||
echo "Setting ${candidate} version ${VERSION} as default."
|
||||
__sdkman_link_candidate_version "${candidate}" "${VERSION}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Using ${CANDIDATE} version ${VERSION} in this shell."
|
||||
echo "Using ${candidate} version ${VERSION} in this shell."
|
||||
}
|
||||
@@ -38,10 +38,13 @@ function __sdkman_add_to_path {
|
||||
}
|
||||
|
||||
function __sdkman_set_candidate_home {
|
||||
local upper_candidate
|
||||
local candidate version upper_candidate
|
||||
|
||||
upper_candidate=$(echo "${CANDIDATE}" | tr '[:lower:]' '[:upper:]')
|
||||
export "${upper_candidate}_HOME"="${SDKMAN_CANDIDATES_DIR}/${CANDIDATE}/${VERSION}"
|
||||
candidate="$1"
|
||||
version="$2"
|
||||
|
||||
upper_candidate=$(echo "${candidate}" | tr '[:lower:]' '[:upper:]')
|
||||
export "${upper_candidate}_HOME"="${SDKMAN_CANDIDATES_DIR}/${candidate}/${version}"
|
||||
}
|
||||
|
||||
function __sdkman_echo_debug {
|
||||
|
||||
Reference in New Issue
Block a user