mirror of
https://github.com/go-delve/delve.git
synced 2025-10-28 04:35:19 +08:00
goversion: fix development version parsing (#3999)
Fix development version parsing for go1.25.
This commit is contained in:
committed by
GitHub
parent
64ac23de8c
commit
c6657ecd33
@ -50,7 +50,7 @@ func Parse(ver string) (GoVersion, bool) {
|
|||||||
return GoVersion{-1, 0, 0, "", ""}, true
|
return GoVersion{-1, 0, 0, "", ""}, true
|
||||||
}
|
}
|
||||||
|
|
||||||
// new development build: devel goX.Y-COMMIT DATE ARCH
|
// go1.24 development build: devel goX.Y-COMMIT DATE ARCH
|
||||||
ver = strings.Split(ver[2:], "-")[0]
|
ver = strings.Split(ver[2:], "-")[0]
|
||||||
v := strings.SplitN(ver, ".", 2)
|
v := strings.SplitN(ver, ".", 2)
|
||||||
if len(v) != 2 {
|
if len(v) != 2 {
|
||||||
@ -70,40 +70,65 @@ func Parse(ver string) (GoVersion, bool) {
|
|||||||
switch len(v) {
|
switch len(v) {
|
||||||
case 2:
|
case 2:
|
||||||
r.Major, err1 = strconv.Atoi(v[0])
|
r.Major, err1 = strconv.Atoi(v[0])
|
||||||
var vr []string
|
|
||||||
|
|
||||||
if vr = strings.SplitN(v[1], "beta", 2); len(vr) == 2 {
|
var minorstr, rest string
|
||||||
// old beta releases goX.YbetaZ
|
var found bool
|
||||||
var beta int
|
|
||||||
beta, err3 = strconv.Atoi(vr[1])
|
for i, ch := range v[1] {
|
||||||
r.Rev = betaRev(beta)
|
if ch < '0' || ch > '9' {
|
||||||
} else if vr = strings.SplitN(v[1], "b", 2); len(vr) == 2 {
|
minorstr = v[1][:i]
|
||||||
// old boringcrypto version goX.YbZ
|
rest = v[1][i:]
|
||||||
if _, err := strconv.Atoi(vr[1]); err != nil {
|
found = true
|
||||||
return GoVersion{}, false
|
break
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
vr = strings.SplitN(v[1], "rc", 2)
|
|
||||||
if len(vr) == 2 {
|
|
||||||
// rc release goX.YrcZ
|
|
||||||
var rc int
|
|
||||||
rc, err3 = strconv.Atoi(vr[1])
|
|
||||||
r.Rev = rcRev(rc)
|
|
||||||
} else {
|
|
||||||
r.Minor, err2 = strconv.Atoi(v[1])
|
|
||||||
if err2 != nil {
|
|
||||||
return GoVersion{}, false
|
|
||||||
}
|
|
||||||
return r, true
|
|
||||||
}
|
}
|
||||||
|
if !found {
|
||||||
|
minorstr = v[1]
|
||||||
}
|
}
|
||||||
|
|
||||||
// old major release (if none of the options above apply) goX.Y
|
r.Minor, err2 = strconv.Atoi(minorstr)
|
||||||
|
|
||||||
r.Minor, err2 = strconv.Atoi(vr[0])
|
|
||||||
r.Proposal = ""
|
r.Proposal = ""
|
||||||
|
|
||||||
if err1 != nil || err2 != nil || err3 != nil {
|
if err1 != nil || err2 != nil {
|
||||||
|
return GoVersion{}, false
|
||||||
|
}
|
||||||
|
|
||||||
|
if rest == "" {
|
||||||
|
// old major release: goX.Y
|
||||||
|
return r, true
|
||||||
|
}
|
||||||
|
|
||||||
|
hasPrefix := func(pfx string) bool {
|
||||||
|
if strings.HasPrefix(rest, pfx) {
|
||||||
|
rest = rest[len(pfx):]
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
switch {
|
||||||
|
case hasPrefix("-devel_"):
|
||||||
|
// go1.25 development version: go1.25-devel_COMMIT DATE ARCH
|
||||||
|
r.Rev = versionedDevel
|
||||||
|
case hasPrefix("beta"):
|
||||||
|
// old beta releases goX.YbetaZ
|
||||||
|
var beta int
|
||||||
|
beta, err3 = strconv.Atoi(rest)
|
||||||
|
r.Rev = betaRev(beta)
|
||||||
|
case hasPrefix("b"):
|
||||||
|
// old boringcrypto version goX.YbZ
|
||||||
|
_, err3 = strconv.Atoi(rest)
|
||||||
|
case hasPrefix("rc"):
|
||||||
|
// old rc release goX.YrcZ
|
||||||
|
var rc int
|
||||||
|
rc, err3 = strconv.Atoi(rest)
|
||||||
|
r.Rev = rcRev(rc)
|
||||||
|
default:
|
||||||
|
// what is this?
|
||||||
|
return GoVersion{}, false
|
||||||
|
}
|
||||||
|
|
||||||
|
if err3 != nil {
|
||||||
return GoVersion{}, false
|
return GoVersion{}, false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -78,6 +78,7 @@ func TestParseVersionStringEqual(t *testing.T) {
|
|||||||
versionEqual(t, "go1.21.1-something", GoVersion{1, 21, 1, "", "something"})
|
versionEqual(t, "go1.21.1-something", GoVersion{1, 21, 1, "", "something"})
|
||||||
versionEqual(t, "devel +17efbfc Tue Jul 28 17:39:19 2015 +0000 linux/amd64", GoVersion{Major: -1})
|
versionEqual(t, "devel +17efbfc Tue Jul 28 17:39:19 2015 +0000 linux/amd64", GoVersion{Major: -1})
|
||||||
versionEqual(t, "devel go1.24-1bb6f19a25 Mon Oct 14 15:17:20 2024 -0400 linux/amd64", GoVersion{1, 24, versionedDevel, "", ""})
|
versionEqual(t, "devel go1.24-1bb6f19a25 Mon Oct 14 15:17:20 2024 -0400 linux/amd64", GoVersion{1, 24, versionedDevel, "", ""})
|
||||||
|
versionEqual(t, "go1.25-devel_6953ef86cd Mon May 5 04:05:18 2025 -0700 linux/amd64", GoVersion{1, 25, versionedDevel, "", ""})
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestRoundtrip(t *testing.T) {
|
func TestRoundtrip(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user