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