]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go/internal/module: in VersionError, do not wrap an existing ModuleError
authorBryan C. Mills <bcmills@google.com>
Fri, 9 Aug 2019 21:31:23 +0000 (17:31 -0400)
committerBryan C. Mills <bcmills@google.com>
Thu, 12 Sep 2019 14:08:16 +0000 (14:08 +0000)
VersionError wraps the given error in a ModuleError struct.

If the given error is already a ModuleError for the same path and
version, we now return it directly instead of wrapping.
This makes it safer to call VersionError if we don't know whether
a given error is already wrapped.

Updates #30748

Change-Id: I41b23f6c3ead0ec382e848696da51f478da1ad35
Reviewed-on: https://go-review.googlesource.com/c/go/+/189781
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/module/module.go

index a1a3ccfe8ac4b90885b229050190d626956d12ce..3d1ad2762875b3c03496ff113c700d676f662db4 100644 (file)
@@ -50,8 +50,13 @@ type ModuleError struct {
        Err     error
 }
 
-// VersionError returns a ModuleError derived from a Version and error.
+// VersionError returns a ModuleError derived from a Version and error,
+// or err itself if it is already such an error.
 func VersionError(v Version, err error) error {
+       var mErr *ModuleError
+       if errors.As(err, &mErr) && mErr.Path == v.Path && mErr.Version == v.Version {
+               return err
+       }
        return &ModuleError{
                Path:    v.Path,
                Version: v.Version,