mirror of
https://github.com/golang/go
synced 2024-11-19 01:54:39 -07:00
cmd/go/internal/modload: annotate replacements in PackageNotInModuleError
Fixes #34085 Change-Id: I3111f5997466ad33f51e80c71f5fb2ccebdcc6e4 Reviewed-on: https://go-review.googlesource.com/c/go/+/193617 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
0f7b4e72a0
commit
8189a06190
@ -21,7 +21,7 @@ var importTests = []struct {
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "golang.org/x/net",
|
path: "golang.org/x/net",
|
||||||
err: "module golang.org/x/net@.* found, but does not contain package golang.org/x/net",
|
err: `module golang.org/x/net@.* found \(v0.0.0-.*\), but does not contain package golang.org/x/net`,
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
path: "golang.org/x/text",
|
path: "golang.org/x/text",
|
||||||
|
@ -1205,6 +1205,11 @@ func (*mvsReqs) next(m module.Version) (module.Version, error) {
|
|||||||
return module.Version{Path: m.Path, Version: "none"}, nil
|
return module.Version{Path: m.Path, Version: "none"}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// fetch downloads the given module (or its replacement)
|
||||||
|
// and returns its location.
|
||||||
|
//
|
||||||
|
// The isLocal return value reports whether the replacement,
|
||||||
|
// if any, is local to the filesystem.
|
||||||
func fetch(mod module.Version) (dir string, isLocal bool, err error) {
|
func fetch(mod module.Version) (dir string, isLocal bool, err error) {
|
||||||
if mod == Target {
|
if mod == Target {
|
||||||
return ModRoot(), true, nil
|
return ModRoot(), true, nil
|
||||||
|
@ -381,9 +381,10 @@ func QueryPattern(pattern, query string, allowed func(module.Version) bool) ([]Q
|
|||||||
r.Packages = match(r.Mod, root, isLocal)
|
r.Packages = match(r.Mod, root, isLocal)
|
||||||
if len(r.Packages) == 0 {
|
if len(r.Packages) == 0 {
|
||||||
return r, &PackageNotInModuleError{
|
return r, &PackageNotInModuleError{
|
||||||
Mod: r.Mod,
|
Mod: r.Mod,
|
||||||
Query: query,
|
Replacement: Replacement(r.Mod),
|
||||||
Pattern: pattern,
|
Query: query,
|
||||||
|
Pattern: pattern,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return r, nil
|
return r, nil
|
||||||
@ -536,21 +537,32 @@ func (e *NoMatchingVersionError) Error() string {
|
|||||||
// code for the versions it knows about, and thus did not have the opportunity
|
// code for the versions it knows about, and thus did not have the opportunity
|
||||||
// to return a non-400 status code to suppress fallback.
|
// to return a non-400 status code to suppress fallback.
|
||||||
type PackageNotInModuleError struct {
|
type PackageNotInModuleError struct {
|
||||||
Mod module.Version
|
Mod module.Version
|
||||||
Query string
|
Replacement module.Version
|
||||||
Pattern string
|
Query string
|
||||||
|
Pattern string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *PackageNotInModuleError) Error() string {
|
func (e *PackageNotInModuleError) Error() string {
|
||||||
found := ""
|
found := ""
|
||||||
if e.Query != e.Mod.Version {
|
if r := e.Replacement; r.Path != "" {
|
||||||
|
replacement := r.Path
|
||||||
|
if r.Version != "" {
|
||||||
|
replacement = fmt.Sprintf("%s@%s", r.Path, r.Version)
|
||||||
|
}
|
||||||
|
if e.Query == e.Mod.Version {
|
||||||
|
found = fmt.Sprintf(" (replaced by %s)", replacement)
|
||||||
|
} else {
|
||||||
|
found = fmt.Sprintf(" (%s, replaced by %s)", e.Mod.Version, replacement)
|
||||||
|
}
|
||||||
|
} else if e.Query != e.Mod.Version {
|
||||||
found = fmt.Sprintf(" (%s)", e.Mod.Version)
|
found = fmt.Sprintf(" (%s)", e.Mod.Version)
|
||||||
}
|
}
|
||||||
|
|
||||||
if strings.Contains(e.Pattern, "...") {
|
if strings.Contains(e.Pattern, "...") {
|
||||||
return fmt.Sprintf("module %s@%s%s found, but does not contain packages matching %s", e.Mod.Path, e.Query, found, e.Pattern)
|
return fmt.Sprintf("module %s@%s found%s, but does not contain packages matching %s", e.Mod.Path, e.Query, found, e.Pattern)
|
||||||
}
|
}
|
||||||
return fmt.Sprintf("module %s@%s%s found, but does not contain package %s", e.Mod.Path, e.Query, found, e.Pattern)
|
return fmt.Sprintf("module %s@%s found%s, but does not contain package %s", e.Mod.Path, e.Query, found, e.Pattern)
|
||||||
}
|
}
|
||||||
|
|
||||||
// ModuleHasRootPackage returns whether module m contains a package m.Path.
|
// ModuleHasRootPackage returns whether module m contains a package m.Path.
|
||||||
|
@ -10,11 +10,11 @@ grep 'require rsc.io/quote' go.mod
|
|||||||
|
|
||||||
cp go.mod.orig go.mod
|
cp go.mod.orig go.mod
|
||||||
! go get -d rsc.io/quote/x...
|
! go get -d rsc.io/quote/x...
|
||||||
stderr 'go get rsc.io/quote/x...: module rsc.io/quote@upgrade \(v1.5.2\) found, but does not contain packages matching rsc.io/quote/x...'
|
stderr 'go get rsc.io/quote/x...: module rsc.io/quote@upgrade found \(v1.5.2\), but does not contain packages matching rsc.io/quote/x...'
|
||||||
! grep 'require rsc.io/quote' go.mod
|
! grep 'require rsc.io/quote' go.mod
|
||||||
|
|
||||||
! go get -d rsc.io/quote/x/...
|
! go get -d rsc.io/quote/x/...
|
||||||
stderr 'go get rsc.io/quote/x/...: module rsc.io/quote@upgrade \(v1.5.2\) found, but does not contain packages matching rsc.io/quote/x/...'
|
stderr 'go get rsc.io/quote/x/...: module rsc.io/quote@upgrade found \(v1.5.2\), but does not contain packages matching rsc.io/quote/x/...'
|
||||||
! grep 'require rsc.io/quote' go.mod
|
! grep 'require rsc.io/quote' go.mod
|
||||||
|
|
||||||
# If a pattern matches no packages within a module, the module should not
|
# If a pattern matches no packages within a module, the module should not
|
||||||
|
7
src/cmd/go/testdata/script/mod_replace.txt
vendored
7
src/cmd/go/testdata/script/mod_replace.txt
vendored
@ -38,6 +38,13 @@ grep 'not-rsc.io/quote/v3 v3.1.0' go.mod
|
|||||||
exec ./a5.exe
|
exec ./a5.exe
|
||||||
stdout 'Concurrency is not parallelism.'
|
stdout 'Concurrency is not parallelism.'
|
||||||
|
|
||||||
|
# Error messages for modules not found in replacements should
|
||||||
|
# indicate the replacement module.
|
||||||
|
cp go.mod.orig go.mod
|
||||||
|
go mod edit -replace=rsc.io/quote/v3=./local/rsc.io/quote/v3
|
||||||
|
! go get -d rsc.io/quote/v3/missing-package
|
||||||
|
stderr 'module rsc.io/quote/v3@upgrade found \(v3.0.0, replaced by ./local/rsc.io/quote/v3\), but does not contain package'
|
||||||
|
|
||||||
-- go.mod --
|
-- go.mod --
|
||||||
module quoter
|
module quoter
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user