]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/modload: propagate errors from Query for missing imports
authorBryan C. Mills <bcmills@google.com>
Thu, 8 Aug 2019 21:08:19 +0000 (17:08 -0400)
committerBryan C. Mills <bcmills@google.com>
Wed, 11 Sep 2019 16:28:37 +0000 (16:28 +0000)
Updates #30748
Updates #28459

Change-Id: I1c34b3dae0bf9361dba0dae66bb868901ecafe29
Reviewed-on: https://go-review.googlesource.com/c/go/+/189780
Run-TryBot: Bryan C. Mills <bcmills@google.com>
TryBot-Result: Gobot Gobot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
src/cmd/go/internal/modload/import.go

index 70add3507a20b08e478140e8b11b607a9b3ab416..bb5e05e9e30140dc8ce0dec5371744952489436e 100644 (file)
@@ -28,6 +28,7 @@ import (
 type ImportMissingError struct {
        ImportPath string
        Module     module.Version
+       QueryErr   error
 
        // newMissingVersion is set to a newer version of Module if one is present
        // in the build list. When set, we can't automatically upgrade.
@@ -39,9 +40,12 @@ func (e *ImportMissingError) Error() string {
                if str.HasPathPrefix(e.ImportPath, "cmd") {
                        return fmt.Sprintf("package %s is not in GOROOT (%s)", e.ImportPath, filepath.Join(cfg.GOROOT, "src", e.ImportPath))
                }
+               if e.QueryErr != nil {
+                       return fmt.Sprintf("cannot find module providing package %s: %v", e.ImportPath, e.QueryErr)
+               }
                return "cannot find module providing package " + e.ImportPath
        }
-       return "missing module for import: " + e.Module.Path + "@" + e.Module.Version + " provides " + e.ImportPath
+       return fmt.Sprintf("missing module for import: %s@%s provides %s", e.Module.Path, e.Module.Version, e.ImportPath)
 }
 
 // Import finds the module and directory in the build list
@@ -197,7 +201,7 @@ func Import(path string) (m module.Version, dir string, err error) {
                if errors.Is(err, os.ErrNotExist) {
                        // Return "cannot find module providing package […]" instead of whatever
                        // low-level error QueryPackage produced.
-                       return module.Version{}, "", &ImportMissingError{ImportPath: path}
+                       return module.Version{}, "", &ImportMissingError{ImportPath: path, QueryErr: err}
                } else {
                        return module.Version{}, "", err
                }