Makefile: new deps strategy fixes deps in branches

Currently when running `make updatedeps` from a branch, the dependency
list from master ends up getting used. We tried to work around this in
35490f7812, and got part way there, but
here's what was happening:

 - record the current SHA
 - run `go get -f -u -v ./...` which ends up checking out master
 - master is checked out early in the `go get` process, which means all
   subsequent dependencies are resolved from master
 - re-checkout the recorded SHA
 - run tests

This works in most cases, except when the branch being tested actually
changes the list of dependencies in some way.

Here we move away from letting `go get -v` walk through everything in
`./...`, instead building our own list of dependencies with the help of
`deplist`. We can then filter terraform packages out from the list, so
they don't get touched, and safely update the rest.

This should solve problems like those observed in #899 and #900.

__Note__: had to add a feature to deplist to make this work properly;
see 016ef97111
Working on getting it accepted upstream.
This commit is contained in:
Paul Hinze 2015-01-30 15:43:47 -06:00
parent 6947ba2518
commit a764adbf1b
1 changed files with 6 additions and 5 deletions

View File

@ -32,14 +32,15 @@ testrace: generate
# updatedeps installs all the dependencies that Terraform needs to run # updatedeps installs all the dependencies that Terraform needs to run
# and build. # and build.
updatedeps: updatedeps:
$(eval REF := $(shell sh -c "\ go get -u github.com/phinze/deplist
git symbolic-ref --short HEAD 2>/dev/null \
|| git rev-parse HEAD"))
go get -u github.com/mitchellh/gox go get -u github.com/mitchellh/gox
go get -u golang.org/x/tools/cmd/stringer go get -u golang.org/x/tools/cmd/stringer
go get -u golang.org/x/tools/cmd/vet go get -u golang.org/x/tools/cmd/vet
go get -f -u -v ./... go list github.com/hashicorp/terraform/... \
git checkout $(REF) | xargs -n 1 deplist -s \
| grep -v github.com/hashicorp/terraform \
| sort -u \
| xargs go get -f -u -v
# vet runs the Go source code static analysis tool `vet` to find # vet runs the Go source code static analysis tool `vet` to find
# any common errors. # any common errors.