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)
 	}
 }