maintner/maintnerd/maintapi: ignore unexpected release branches
Fixes golang/go#29510
Change-Id: Ia67cd1e929282d840f6a1607d56da7e3ba65f5b5
Reviewed-on: https://go-review.googlesource.com/c/157443
Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
diff --git a/maintner/maintnerd/maintapi/api.go b/maintner/maintnerd/maintapi/api.go
index 1c76fdb..f8ccd4e 100644
--- a/maintner/maintnerd/maintapi/api.go
+++ b/maintner/maintnerd/maintapi/api.go
@@ -11,7 +11,9 @@
"fmt"
"io"
"log"
+ "regexp"
"sort"
+ "strconv"
"strings"
"sync"
"time"
@@ -244,6 +246,10 @@
ForeachNonChangeRef(fn func(ref string, hash maintner.GitHash) error) error
}
+// releaseBranchRx matches things of the form "release-branch.go1.5" or "release-branch.go2",
+// but not things like "release-branch.go1.10-security".
+var releaseBranchRx = regexp.MustCompile(`^release-branch\.go(\d{1,2})(?:\.(\d{1,3}))?$`)
+
// supportedGoReleases returns the latest patches of releases
// that are considered supported per policy.
func supportedGoReleases(goProj nonChangeRefLister) ([]*apipb.GoRelease, error) {
@@ -289,14 +295,16 @@
case strings.HasPrefix(ref, "refs/heads/release-branch.go"):
// Release branch.
branchName := ref[len("refs/heads/"):]
- var major, minor int32
- _, err := fmt.Sscanf(branchName, "release-branch.go%d.%d", &major, &minor)
- if err == io.ErrUnexpectedEOF {
- // Do nothing.
- } else if err != nil {
+ m := releaseBranchRx.FindStringSubmatch(branchName)
+ if m == nil {
return nil
}
- branches[majorMinor{major, minor}] = branch{
+ var major, minor int
+ major, _ = strconv.Atoi(m[1])
+ if len(m) > 2 {
+ minor, _ = strconv.Atoi(m[2])
+ }
+ branches[majorMinor{int32(major), int32(minor)}] = branch{
Name: branchName,
Commit: hash,
}
diff --git a/maintner/maintnerd/maintapi/api_test.go b/maintner/maintnerd/maintapi/api_test.go
index f1c02f9..435700a 100644
--- a/maintner/maintnerd/maintapi/api_test.go
+++ b/maintner/maintnerd/maintapi/api_test.go
@@ -56,9 +56,6 @@
var hitGerrit = flag.Bool("hit_gerrit", false, "query production Gerrit in TestFindTryWork")
func TestFindTryWork(t *testing.T) {
- if testing.Short() {
- t.Skip("skipping in short mode")
- }
if !*hitGerrit {
t.Skip("skipping without flag --hit_gerrit")
}
@@ -153,6 +150,9 @@
)
func getGoData(tb testing.TB) *maintner.Corpus {
+ if testing.Short() {
+ tb.Skip("skipping maintner godata test in short mode")
+ }
corpusMu.Lock()
defer corpusMu.Unlock()
if corpusCache != nil {
@@ -185,6 +185,8 @@
{"refs/heads/release-branch.go1.1", gitHash("1d6d8fca241bb611af51e265c1b5a2e9ae904702")},
{"refs/heads/release-branch.go1.10", gitHash("e97b7d68f107ff60152f5bd5701e0286f221ee93")},
{"refs/heads/release-branch.go1.11", gitHash("97781d2ed116d2cd9cb870d0b84fc0ec598c9abc")},
+ {"refs/heads/release-branch.go1.10-security", gitHash("e97b7d68f107ff60152f5bd5701e0286f221ee93")},
+ {"refs/heads/release-branch.go1.11-security", gitHash("97781d2ed116d2cd9cb870d0b84fc0ec598c9abc")},
{"refs/heads/release-branch.go1.2", gitHash("43d00b0942c1c6f43993ac71e1eea48e62e22b8d")},
{"refs/heads/release-branch.r59", gitHash("5d9765785dff74784bbdad43f7847b6825509032")},
{"refs/heads/release-branch.r60", gitHash("394b383a1ee0ac3fec5e453a7dbe590d3ce6d6b0")},