#!/bin/sh # # update-xtools.sh: idempotently update the vendored # copy of the x/tools repository used by cmd/vet. set -u analysis=$(go list -f {{.Dir}} golang.org/x/tools/go/analysis) || { echo "Add golang.org/x/tools to your GOPATH"; exit 1; } >&2 xtools=$(dirname $(dirname $analysis)) vendor=$(dirname $0) # Find the x/tools packages directly imported by cmd/vet. go list -f '{{range $k, $v := .ImportMap}}{{$k}} {{end}}' cmd/vet | grep golang.org/x/tools | # Vendor their transitive closure of dependencies. xargs go list -f '{{.ImportPath}} {{.Dir}}' -deps | grep golang.org/x/tools | while read path dir do mkdir -p $vendor/$path cp $dir/* -t $vendor/$path 2>/dev/null # ignore errors from subdirectories rm -f $vendor/$path/*_test.go git add $vendor/$path done echo "Copied $xtools@$(cd $analysis && git rev-parse --short HEAD) to $vendor" >&2 go build -o /dev/null cmd/vet || { echo "Failed to build cmd/vet"; exit 1; } >&2