build: Clean up "go vet" and "go lint" steps

GitHub-Pull-Request: https://github.com/syncthing/syncthing/pull/2972
This commit is contained in:
Jakob Borg 2016-04-15 07:26:25 +00:00 committed by Audrius Butkevicius
parent c49453c519
commit a4cd4cc253
1 changed files with 30 additions and 20 deletions

View File

@ -26,6 +26,7 @@ import (
"runtime"
"strconv"
"strings"
"syscall"
"text/template"
"time"
)
@ -161,9 +162,8 @@ func main() {
}
install(targets["all"], tags)
vet("./cmd/syncthing")
vet("./lib/...")
lint("./cmd/syncthing")
vet("cmd", "lib")
lint("./cmd/...")
lint("./lib/...")
return
}
@ -230,11 +230,10 @@ func main() {
clean()
case "vet":
vet("./cmd/syncthing")
vet("./lib/...")
vet("cmd", "lib")
case "lint":
lint("./cmd/syncthing")
lint("./cmd/...")
lint("./lib/...")
default:
@ -852,24 +851,25 @@ func zipFile(out string, files []archiveFile) {
}
}
func vet(pkg string) {
bs, err := runError("go", "vet", pkg)
if err != nil && err.Error() == "exit status 3" || bytes.Contains(bs, []byte("no such tool \"vet\"")) {
// Go said there is no go vet
log.Println(`- No go vet, no vetting. Try "go get -u golang.org/x/tools/cmd/vet".`)
return
func vet(dirs ...string) {
params := []string{"tool", "vet", "-all"}
params = append(params, dirs...)
bs, err := runError("go", params...)
if len(bs) > 0 {
log.Printf("%s", bs)
}
falseAlarmComposites := regexp.MustCompile("composite literal uses unkeyed fields")
exitStatus := regexp.MustCompile("exit status 1")
for _, line := range bytes.Split(bs, []byte("\n")) {
if falseAlarmComposites.Match(line) || exitStatus.Match(line) {
continue
}
if len(line) > 0 {
log.Printf("%s", line)
if err != nil {
if exitStatus(err) == 3 {
// Exit code 3, the "vet" tool is not installed
return
}
// A genuine error exit from the vet tool.
log.Fatal(err)
}
}
func lint(pkg string) {
@ -908,3 +908,13 @@ func macosCodesign(file string) {
log.Println("Codesign: successfully signed", file)
}
}
func exitStatus(err error) int {
if err, ok := err.(*exec.ExitError); ok {
if ws, ok := err.ProcessState.Sys().(syscall.WaitStatus); ok {
return ws.ExitStatus()
}
}
return -1
}