diff options
Diffstat (limited to 'internal/release')
| -rw-r--r-- | internal/release/release.go | 17 | ||||
| -rw-r--r-- | internal/release/release_tags_test.go | 23 |
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 { |
