@@ -50,7 +50,7 @@ func Parse(ver string) (GoVersion, bool) {
50
50
return GoVersion {- 1 , 0 , 0 , "" , "" }, true
51
51
}
52
52
53
- // new development build: devel goX.Y-COMMIT DATE ARCH
53
+ // go1.24 development build: devel goX.Y-COMMIT DATE ARCH
54
54
ver = strings .Split (ver [2 :], "-" )[0 ]
55
55
v := strings .SplitN (ver , "." , 2 )
56
56
if len (v ) != 2 {
@@ -70,40 +70,65 @@ func Parse(ver string) (GoVersion, bool) {
70
70
switch len (v ) {
71
71
case 2 :
72
72
r .Major , err1 = strconv .Atoi (v [0 ])
73
- var vr []string
74
73
75
- if vr = strings .SplitN (v [1 ], "beta" , 2 ); len (vr ) == 2 {
74
+ var minorstr , rest string
75
+ var found bool
76
+
77
+ for i , ch := range v [1 ] {
78
+ if ch < '0' || ch > '9' {
79
+ minorstr = v [1 ][:i ]
80
+ rest = v [1 ][i :]
81
+ found = true
82
+ break
83
+ }
84
+ }
85
+ if ! found {
86
+ minorstr = v [1 ]
87
+ }
88
+
89
+ r .Minor , err2 = strconv .Atoi (minorstr )
90
+ r .Proposal = ""
91
+
92
+ if err1 != nil || err2 != nil {
93
+ return GoVersion {}, false
94
+ }
95
+
96
+ if rest == "" {
97
+ // old major release: goX.Y
98
+ return r , true
99
+ }
100
+
101
+ hasPrefix := func (pfx string ) bool {
102
+ if strings .HasPrefix (rest , pfx ) {
103
+ rest = rest [len (pfx ):]
104
+ return true
105
+ }
106
+ return false
107
+ }
108
+
109
+ switch {
110
+ case hasPrefix ("-devel_" ):
111
+ // go1.25 development version: go1.25-devel_COMMIT DATE ARCH
112
+ r .Rev = versionedDevel
113
+ case hasPrefix ("beta" ):
76
114
// old beta releases goX.YbetaZ
77
115
var beta int
78
- beta , err3 = strconv .Atoi (vr [ 1 ] )
116
+ beta , err3 = strconv .Atoi (rest )
79
117
r .Rev = betaRev (beta )
80
- } else if vr = strings . SplitN ( v [ 1 ], "b" , 2 ); len ( vr ) == 2 {
118
+ case hasPrefix ( "b" ):
81
119
// old boringcrypto version goX.YbZ
82
- if _ , err := strconv .Atoi (vr [1 ]); err != nil {
83
- return GoVersion {}, false
84
- }
85
- } else {
86
- vr = strings .SplitN (v [1 ], "rc" , 2 )
87
- if len (vr ) == 2 {
88
- // rc release goX.YrcZ
89
- var rc int
90
- rc , err3 = strconv .Atoi (vr [1 ])
91
- r .Rev = rcRev (rc )
92
- } else {
93
- r .Minor , err2 = strconv .Atoi (v [1 ])
94
- if err2 != nil {
95
- return GoVersion {}, false
96
- }
97
- return r , true
98
- }
120
+ _ , err3 = strconv .Atoi (rest )
121
+ case hasPrefix ("rc" ):
122
+ // old rc release goX.YrcZ
123
+ var rc int
124
+ rc , err3 = strconv .Atoi (rest )
125
+ r .Rev = rcRev (rc )
126
+ default :
127
+ // what is this?
128
+ return GoVersion {}, false
99
129
}
100
130
101
- // old major release (if none of the options above apply) goX.Y
102
-
103
- r .Minor , err2 = strconv .Atoi (vr [0 ])
104
- r .Proposal = ""
105
-
106
- if err1 != nil || err2 != nil || err3 != nil {
131
+ if err3 != nil {
107
132
return GoVersion {}, false
108
133
}
109
134
0 commit comments