Extract version parsing to shared function and improve error handling

- Created Get-VersionChangeType function in scripts/utils.ps1 (DRY principle)
- Updated vendor.yml and update.ps1 to use shared function
- Fixed numeric comparison for COUNT_UPDATED (fromJSON for proper numeric eval)
- Improved git operation error handling with proper exit code checking
- Only reset commit if it succeeded but push failed

Agent-Logs-Url: https://github.com/cmderdev/cmder/sessions/4511d497-599a-4a80-bc3c-12bd6f2d8191

Co-authored-by: DRSDavidSoft <4673812+DRSDavidSoft@users.noreply.github.com>
This commit is contained in:
copilot-swe-agent[bot]
2026-04-12 02:38:52 +00:00
committed by GitHub
parent 09b00758b1
commit 58ab7976d2
3 changed files with 137 additions and 92 deletions

View File

@@ -304,47 +304,15 @@ foreach ($s in $sources) {
$count++
# Analyze version change type
$changeType = "unknown"
try {
# Try parsing as semantic version
# Handle versions with more than 4 parts by taking only the first 3-4 parts
$oldVerStr = $s.version.Split('-')[0]
$newVerStr = $version.Split('-')[0]
# Split by dots and take only numeric parts, first 4 max
$oldParts = $oldVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
$newParts = $newVerStr.Split('.') | Where-Object { $_ -match '^\d+$' } | Select-Object -First 4
# Ensure we have at least 2 parts (major.minor)
if ($oldParts.Count -ge 2 -and $newParts.Count -ge 2) {
$oldVerParseable = $oldParts -join '.'
$newVerParseable = $newParts -join '.'
$oldVer = [System.Version]::Parse($oldVerParseable)
$newVer = [System.Version]::Parse($newVerParseable)
if ($newVer -lt $oldVer) {
$changeType = "downgrade"
$hasBreakingChanges = $true
} elseif ($newVer.Major -gt $oldVer.Major) {
$changeType = "major"
$hasBreakingChanges = $true
} elseif ($newVer.Minor -gt $oldVer.Minor) {
$changeType = "minor"
} elseif ($newVer.Build -gt $oldVer.Build) {
$changeType = "patch"
} else {
# No version increase detected (could be equal or non-incremental change)
$changeType = "unknown"
}
} else {
# Not enough numeric parts for semantic versioning
throw "Not enough numeric version parts"
}
} catch {
# If semantic versioning fails, treat as unknown (potentially breaking)
$changeType = "unknown"
# Analyze version change type using shared function
$result = Get-VersionChangeType -OldVersion $s.version -NewVersion $version
$changeType = $result.ChangeType
# Determine if this is a breaking change
if ($changeType -eq "downgrade" -or $changeType -eq "major") {
$hasBreakingChanges = $true
} elseif ($changeType -eq "unknown") {
# If version parsing failed, treat as potentially breaking
$hasBreakingChanges = $true
Write-Verbose "Could not parse version as semantic version for dependency '$($s.name)' (old: '$($s.version)', new: '$version'), treating as potentially breaking"
}