mirror of
https://github.com/jimeh/.vscode.d.git
synced 2026-02-19 11:26:39 +00:00
chore(siren): improve version check logic for installed extensions
This commit is contained in:
57
siren
57
siren
@@ -321,25 +321,15 @@ installed_extensions() {
|
|||||||
echo "${_INSTALLED_EXTENSIONS}"
|
echo "${_INSTALLED_EXTENSIONS}"
|
||||||
}
|
}
|
||||||
|
|
||||||
# Check if extension is already installed, ignoring version
|
# Get the currently installed version of an extension
|
||||||
is_extension_installed() {
|
get_installed_version() {
|
||||||
local editor_cmd="$1"
|
local editor_cmd="$1"
|
||||||
local extension="$2"
|
local extension="$2"
|
||||||
|
|
||||||
# Check if extension exists in cached list
|
# Extract version from cached list
|
||||||
installed_extensions "${editor_cmd}" |
|
installed_extensions "${editor_cmd}" |
|
||||||
grep -q "^$(printf '%s' "${extension}" | sed 's/[[\.*^$()+?{|]/\\&/g')@"
|
grep "^$(printf '%s' "${extension}" | sed "s/[[\.*^$()+?{|]/\\\\&/g")@" |
|
||||||
}
|
sed "s/^[^@]*@//"
|
||||||
|
|
||||||
# Check if extension is installed with exact version
|
|
||||||
is_exact_version_installed() {
|
|
||||||
local editor_cmd="$1"
|
|
||||||
local extension="$2"
|
|
||||||
local version="$3"
|
|
||||||
|
|
||||||
# Check if exact extension@version exists in cached list
|
|
||||||
installed_extensions "${editor_cmd}" |
|
|
||||||
grep -q "^$(printf '%s' "${extension}@${version}" | sed 's/[[\.*^$()+?{|]/\\&/g')$"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Install an extension directly using the marketplace
|
# Install an extension directly using the marketplace
|
||||||
@@ -501,26 +491,25 @@ do_install_extensions() {
|
|||||||
extension="${line%@*}"
|
extension="${line%@*}"
|
||||||
version="${line#*@}"
|
version="${line#*@}"
|
||||||
|
|
||||||
# Check if already installed with correct version
|
# Check if already installed and get current version
|
||||||
if [[ "${use_latest}" == "true" ]]; then
|
local current_version
|
||||||
# In latest mode, just check if extension is installed (any version)
|
current_version="$(get_installed_version "${editor_cmd}" "${extension}")"
|
||||||
if is_extension_installed "${editor_cmd}" "${extension}"; then
|
|
||||||
echo "Extension ${extension} is already installed, skipping"
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
else
|
|
||||||
# In exact mode, check if the exact version is installed
|
|
||||||
if is_exact_version_installed "${editor_cmd}" "${extension}" "${version}"; then
|
|
||||||
echo "Extension ${extension}@${version} is already installed, skipping"
|
|
||||||
continue
|
|
||||||
elif is_extension_installed "${editor_cmd}" "${extension}"; then
|
|
||||||
echo "Extension ${extension} is installed but wrong version, force-installing ${version}"
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Determine if we need to force install (when wrong version is installed)
|
|
||||||
local force_install="false"
|
local force_install="false"
|
||||||
if [[ "${use_latest}" == "false" ]] && is_extension_installed "${editor_cmd}" "${extension}"; then
|
|
||||||
|
if [[ -z "${current_version}" ]]; then
|
||||||
|
# Extension not installed
|
||||||
|
echo "Installing ${extension}@${version}"
|
||||||
|
elif [[ "${use_latest}" == "true" ]]; then
|
||||||
|
# In latest mode, skip if any version is installed
|
||||||
|
echo "Extension ${extension} is already installed (current: ${current_version}), skipping"
|
||||||
|
continue
|
||||||
|
elif [[ "${current_version}" == "${version}" ]]; then
|
||||||
|
# Exact version already installed
|
||||||
|
echo "Extension ${extension}@${version} is already installed, skipping"
|
||||||
|
continue
|
||||||
|
else
|
||||||
|
# Wrong version installed, need to force install
|
||||||
|
echo "Extension ${extension} is installed but wrong version (current: ${current_version}, wanted: ${version}), force-installing ${version}"
|
||||||
force_install="true"
|
force_install="true"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user