From 2d2de6298155751e44170d1c9a9baacb688d2606 Mon Sep 17 00:00:00 2001 From: Ian Cottrell Date: Mon, 22 Oct 2018 13:05:19 -0400 Subject: [PATCH] go/packages: sort root list in Load The builders are currently flaky failing because of a root order being wrong. This causes all root lists to be sorted before being returned, so the order is always stable no matter which underlying driver is running. Fixes golang/go#27594 Change-Id: I09db45c67ad00f23dfaec8e271acbd13fc338888 Reviewed-on: https://go-review.googlesource.com/c/143737 Run-TryBot: Ian Cottrell Reviewed-by: Alan Donovan TryBot-Result: Gobot Gobot --- go/packages/golist.go | 1 - go/packages/golist_fallback.go | 5 ----- go/packages/packages.go | 2 ++ go/packages/packages_test.go | 5 +++-- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/go/packages/golist.go b/go/packages/golist.go index a1e9c320..ce4e1ed9 100644 --- a/go/packages/golist.go +++ b/go/packages/golist.go @@ -131,7 +131,6 @@ extractQueries: return nil, err } response.Roots = append(response.Roots, namedResults...) - return response, nil } diff --git a/go/packages/golist_fallback.go b/go/packages/golist_fallback.go index ac0c34f0..09894016 100644 --- a/go/packages/golist_fallback.go +++ b/go/packages/golist_fallback.go @@ -246,11 +246,6 @@ func golistDriverFallback(cfg *Config, words ...string) (*driverResponse, error) createTestVariants(&response, v.pkg, v.xtestPkg) } - // TODO(matloob): Is this the right ordering? - sort.SliceStable(response.Packages, func(i, j int) bool { - return response.Packages[i].PkgPath < response.Packages[j].PkgPath - }) - return &response, nil } diff --git a/go/packages/packages.go b/go/packages/packages.go index 84a3dbb1..ae70c22b 100644 --- a/go/packages/packages.go +++ b/go/packages/packages.go @@ -20,6 +20,7 @@ import ( "os" "path/filepath" "runtime" + "sort" "strings" "sync" @@ -173,6 +174,7 @@ func Load(cfg *Config, patterns ...string) ([]*Package, error) { if err != nil { return nil, err } + sort.Strings(response.Roots) // make all driver responses deterministic return l.refine(response.Roots, response.Packages...) } diff --git a/go/packages/packages_test.go b/go/packages/packages_test.go index 778d631a..8fc514c7 100644 --- a/go/packages/packages_test.go +++ b/go/packages/packages_test.go @@ -298,8 +298,9 @@ func TestLoadAbsolutePath(t *testing.T) { for _, p := range initial { got = append(got, p.ID) } - if !reflect.DeepEqual(got, []string{"golang.org/gopatha/a", "golang.org/gopathb/b"}) { - t.Fatalf("initial packages loaded: got [%s], want [a b]", got) + want := []string{"golang.org/gopatha/a", "golang.org/gopathb/b"} + if !reflect.DeepEqual(got, want) { + t.Fatalf("initial packages loaded: got [%s], want [%s]", got, want) } }