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 <iancottrell@google.com>
Reviewed-by: Alan Donovan <adonovan@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
diff --git a/go/packages/golist.go b/go/packages/golist.go
index a1e9c32..ce4e1ed 100644
--- a/go/packages/golist.go
+++ b/go/packages/golist.go
@@ -131,7 +131,6 @@
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 ac0c34f..0989401 100644
--- a/go/packages/golist_fallback.go
+++ b/go/packages/golist_fallback.go
@@ -246,11 +246,6 @@
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 84a3dbb..ae70c22 100644
--- a/go/packages/packages.go
+++ b/go/packages/packages.go
@@ -20,6 +20,7 @@
"os"
"path/filepath"
"runtime"
+ "sort"
"strings"
"sync"
@@ -173,6 +174,7 @@
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 778d631..8fc514c 100644
--- a/go/packages/packages_test.go
+++ b/go/packages/packages_test.go
@@ -298,8 +298,9 @@
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)
}
}