shithub: hugo

Download patch

ref: ea8ef573c6f869de95fdf4b19765d34026de6471
parent: 293e12355dd9d9361774f5ab340cd8a03b4828a1
author: Bjørn Erik Pedersen <[email protected]>
date: Thu Aug 30 08:28:29 EDT 2018

mage: Init packages once

`go list ./...` fails when run in parallel on Windows. This also applies to running `go test ./...` and `go list/...` so we serialize tests.

--- a/magefile.go
+++ b/magefile.go
@@ -12,6 +12,7 @@
 	"path/filepath"
 	"runtime"
 	"strings"
+	"sync"
 	"time"
 
 	"github.com/magefile/mage/mg"
@@ -98,7 +99,11 @@
 		fmt.Printf("Skip Check on %s\n", runtime.Version())
 		return
 	}
-	mg.Deps(Test386, Fmt, Vet)
+
+	mg.Deps(Test386)
+
+	mg.Deps(Fmt, Vet)
+
 	// don't run two tests in parallel, they saturate the CPUs anyway, and running two
 	// causes memory issues in CI.
 	mg.Deps(TestRace)
@@ -161,18 +166,26 @@
 	return nil
 }
 
-var pkgPrefixLen = len("github.com/gohugoio/hugo")
+var (
+	pkgPrefixLen = len("github.com/gohugoio/hugo")
+	pkgs         []string
+	pkgsInit     sync.Once
+)
 
 func hugoPackages() ([]string, error) {
-	s, err := sh.Output(goexe, "list", "./...")
-	if err != nil {
-		return nil, err
-	}
-	pkgs := strings.Split(s, "\n")
-	for i := range pkgs {
-		pkgs[i] = "." + pkgs[i][pkgPrefixLen:]
-	}
-	return pkgs, nil
+	var err error
+	pkgsInit.Do(func() {
+		var s string
+		s, err = sh.Output(goexe, "list", "./...")
+		if err != nil {
+			return
+		}
+		pkgs = strings.Split(s, "\n")
+		for i := range pkgs {
+			pkgs[i] = "." + pkgs[i][pkgPrefixLen:]
+		}
+	})
+	return pkgs, err
 }
 
 // Run golint linter