]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix custom import path wildcards (go get rsc.io/pdf/...)
authorRuss Cox <rsc@golang.org>
Thu, 23 Jul 2015 06:04:01 +0000 (02:04 -0400)
committerRuss Cox <rsc@golang.org>
Mon, 27 Jul 2015 17:32:27 +0000 (17:32 +0000)
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 <iant@golang.org>
src/cmd/go/get.go

index 78088b32674de01c9fc1e3d78efe52fa05aabb8f..90ac832a4bfdf2b018872e6fa409597429ef562f 100644 (file)
@@ -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