chore(siren): improve version check logic for installed extensions

This commit is contained in:
2025-07-05 12:16:45 +01:00
parent cd71446800
commit 57380157cb

57
siren
View File

@@ -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