Skip to content

Commit d93188e

Browse files
committed
fix: add proper semver comparison for updates
1 parent 142eb5c commit d93188e

2 files changed

Lines changed: 60 additions & 6 deletions

File tree

claude-code-sync

Lines changed: 32 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -606,6 +606,23 @@ get_remote_version() {
606606
echo "$content" | grep -oP 'VERSION="\K[^"]+' | head -1
607607
}
608608

609+
compare_semver() {
610+
# Returns: 1 if v1 > v2, 2 if v1 < v2, 0 if equal
611+
local v1="$1" v2="$2"
612+
local IFS='.'
613+
read -ra parts1 <<< "$v1"
614+
read -ra parts2 <<< "$v2"
615+
616+
for i in 0 1 2; do
617+
local p1="${parts1[$i]:-0}"
618+
local p2="${parts2[$i]:-0}"
619+
620+
if (( p1 > p2 )); then echo 1; return; fi
621+
if (( p1 < p2 )); then echo 2; return; fi
622+
done
623+
echo 0
624+
}
625+
609626
cmd_check_update() {
610627
log_info "Checking for updates..."
611628

@@ -620,11 +637,17 @@ cmd_check_update() {
620637
echo "Local version: v$VERSION"
621638
echo "Remote version: v$remote_version"
622639

623-
if [[ "$VERSION" == "$remote_version" ]]; then
640+
local cmp
641+
cmp=$(compare_semver "$remote_version" "$VERSION")
642+
643+
if [[ "$cmp" == "0" ]]; then
624644
log_success "You're up to date!"
625-
else
645+
elif [[ "$cmp" == "1" ]]; then
626646
echo ""
627647
echo -e "Update available! Run: ${BLUE}claude-code-sync update${NC}"
648+
else
649+
echo ""
650+
echo -e "${YELLOW}You're ahead of remote (dev version?)${NC}"
628651
fi
629652
}
630653

@@ -638,9 +661,15 @@ cmd_update() {
638661
die "Could not fetch remote version. Check your internet connection."
639662
fi
640663

641-
if [[ "$VERSION" == "$remote_version" ]]; then
664+
local cmp
665+
cmp=$(compare_semver "$remote_version" "$VERSION")
666+
667+
if [[ "$cmp" == "0" ]]; then
642668
log_success "Already up to date (v$VERSION)"
643669
return
670+
elif [[ "$cmp" == "2" ]]; then
671+
log_warn "Local version (v$VERSION) is newer than remote (v$remote_version). Skipping."
672+
return
644673
fi
645674

646675
log_info "Updating v$VERSION -> v$remote_version..."

claude-code-sync.ps1

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -628,6 +628,23 @@ function Get-RemoteVersion {
628628
return $null
629629
}
630630

631+
function Compare-SemVer {
632+
# Returns: 1 if v1 > v2, -1 if v1 < v2, 0 if equal
633+
param([string]$v1, [string]$v2)
634+
635+
$parts1 = $v1 -split '\.' | ForEach-Object { [int]$_ }
636+
$parts2 = $v2 -split '\.' | ForEach-Object { [int]$_ }
637+
638+
for ($i = 0; $i -lt 3; $i++) {
639+
$p1 = if ($i -lt $parts1.Count) { $parts1[$i] } else { 0 }
640+
$p2 = if ($i -lt $parts2.Count) { $parts2[$i] } else { 0 }
641+
642+
if ($p1 -gt $p2) { return 1 }
643+
if ($p1 -lt $p2) { return -1 }
644+
}
645+
return 0
646+
}
647+
631648
function Invoke-CheckUpdate {
632649
Write-Info "Checking for updates..."
633650
$remoteVersion = Get-RemoteVersion
@@ -640,12 +657,16 @@ function Invoke-CheckUpdate {
640657
Write-Host "Local version: v$VERSION"
641658
Write-Host "Remote version: v$remoteVersion"
642659

643-
if ($VERSION -eq $remoteVersion) {
660+
$cmp = Compare-SemVer $remoteVersion $VERSION
661+
if ($cmp -eq 0) {
644662
Write-Success "You're up to date!"
645-
} else {
663+
} elseif ($cmp -gt 0) {
646664
Write-Host ""
647665
Write-Host "Update available! Run: " -NoNewline
648666
Write-Host "claude-code-sync update" -ForegroundColor Cyan
667+
} else {
668+
Write-Host ""
669+
Write-Host "You're ahead of remote (dev version?)" -ForegroundColor Yellow
649670
}
650671
}
651672

@@ -657,9 +678,13 @@ function Invoke-Update {
657678
throw "Could not fetch remote version. Check your internet connection."
658679
}
659680

660-
if ($VERSION -eq $remoteVersion) {
681+
$cmp = Compare-SemVer $remoteVersion $VERSION
682+
if ($cmp -eq 0) {
661683
Write-Success "Already up to date (v$VERSION)"
662684
return
685+
} elseif ($cmp -lt 0) {
686+
Write-Warn "Local version (v$VERSION) is newer than remote (v$remoteVersion). Skipping."
687+
return
663688
}
664689

665690
Write-Info "Updating v$VERSION -> v$remoteVersion..."

0 commit comments

Comments
 (0)