From: Russ Cox Date: Thu, 23 Jul 2015 06:04:01 +0000 (-0400) Subject: cmd/go: fix custom import path wildcards (go get rsc.io/pdf/...) X-Git-Tag: go1.5beta3~62 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=ca2a66431e4e6f95b5c69a8dde0222d5d2b346ef;p=gostls13.git cmd/go: fix custom import path wildcards (go get rsc.io/pdf/...) Fixes TestGoGetWorksWithVanityWildcards, but that test uses the network and is not run on the builders. For #11806. Change-Id: I35c6677deaf84e2fa9bdb98b62d80d388b5248ae Reviewed-on: https://go-review.googlesource.com/12557 Reviewed-by: Ian Lance Taylor --- diff --git a/src/cmd/go/get.go b/src/cmd/go/get.go index 78088b3267..90ac832a4b 100644 --- a/src/cmd/go/get.go +++ b/src/cmd/go/get.go @@ -166,9 +166,9 @@ var downloadRootCache = map[string]bool{} func download(arg string, parent *Package, stk *importStack, getTestDeps bool) { load := func(path string) *Package { if parent == nil { - return loadPackage(arg, stk) + return loadPackage(path, stk) } - return loadImport(arg, parent.Dir, nil, stk, nil) + return loadImport(path, parent.Dir, nil, stk, nil) } p := load(arg) @@ -204,15 +204,17 @@ func download(arg string, parent *Package, stk *importStack, getTestDeps bool) { wildcardOkay := len(*stk) == 0 isWildcard := false - stk.push(arg) - defer stk.pop() + // Note: Do not stk.push(arg) and defer stk.pop() here. + // The push/pop below are using updated values of arg in some cases. // Download if the package is missing, or update if we're using -u. if p.Dir == "" || *getU { // The actual download. + stk.push(arg) err := downloadPackage(p) if err != nil { errorf("%s", &PackageError{ImportStack: stk.copy(), Err: err.Error()}) + stk.pop() return } @@ -225,6 +227,7 @@ func download(arg string, parent *Package, stk *importStack, getTestDeps bool) { fmt.Fprintf(os.Stderr, "warning: package %v\n", strings.Join(*stk, "\n\timports ")) } } + stk.pop() args := []string{arg} // If the argument has a wildcard in it, re-evaluate the wildcard. @@ -251,7 +254,9 @@ func download(arg string, parent *Package, stk *importStack, getTestDeps bool) { pkgs = pkgs[:0] for _, arg := range args { + stk.push(arg) p := load(arg) + stk.pop() if p.Error != nil { errorf("%s", p.Error) continue