| #!/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 |