summaryrefslogtreecommitdiff
path: root/internal/release
diff options
context:
space:
mode:
Diffstat (limited to 'internal/release')
-rw-r--r--internal/release/release.go17
-rw-r--r--internal/release/release_tags_test.go23
2 files changed, 38 insertions, 2 deletions
diff --git a/internal/release/release.go b/internal/release/release.go
index 0c8b33f..c6eca97 100644
--- a/internal/release/release.go
+++ b/internal/release/release.go
@@ -11,6 +11,7 @@ import (
"sort"
"strconv"
"strings"
+ "unicode"
"codeberg.org/snonux/gitsyncer/internal/aitool"
"codeberg.org/snonux/gitsyncer/internal/httpclient"
@@ -182,9 +183,21 @@ func compareVersions(v1, v2 string) int {
}
func parseVersionPart(part string) int {
- n, err := strconv.Atoi(part)
+ start := 0
+ if part != "" && (part[0] == '+' || part[0] == '-') {
+ start = 1
+ }
+
+ end := start
+ for end < len(part) && unicode.IsDigit(rune(part[end])) {
+ end++
+ }
+ if end == start {
+ return 0
+ }
+
+ n, err := strconv.Atoi(part[:end])
if err != nil {
- // Keep current behavior for non-numeric segments.
return 0
}
diff --git a/internal/release/release_tags_test.go b/internal/release/release_tags_test.go
index eb6d581..521fbe8 100644
--- a/internal/release/release_tags_test.go
+++ b/internal/release/release_tags_test.go
@@ -49,6 +49,25 @@ func TestParseVersionPart_NonNumericReturnsZero(t *testing.T) {
}
}
+func TestParseVersionPart_MixedNumericPrefix(t *testing.T) {
+ t.Parallel()
+
+ testCases := []struct {
+ in string
+ want int
+ }{
+ {in: "1beta", want: 1},
+ {in: "-2x", want: -2},
+ {in: "+12rc1", want: 12},
+ }
+
+ for _, tc := range testCases {
+ if got := parseVersionPart(tc.in); got != tc.want {
+ t.Fatalf("parseVersionPart(%q) = %d, want %d", tc.in, got, tc.want)
+ }
+ }
+}
+
func TestCompareVersions_NonNumericSegmentsFollowZeroFallback(t *testing.T) {
t.Parallel()
@@ -59,6 +78,10 @@ func TestCompareVersions_NonNumericSegmentsFollowZeroFallback(t *testing.T) {
if got := compareVersions("v2.beta", "v2.0"); got != 0 {
t.Fatalf("compareVersions(v2.beta, v2.0) = %d, want 0", got)
}
+
+ if got := compareVersions("v1beta.2", "v1.1"); got != 1 {
+ t.Fatalf("compareVersions(v1beta.2, v1.1) = %d, want 1", got)
+ }
}
func runGit(t *testing.T, repoPath string, args ...string) string {