-
Notifications
You must be signed in to change notification settings - Fork 17.8k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
cmd/go/internal/modload: use replacements to resolve missing imports
If the replacements specify one or more versions, we choose the latest (for consistency with the QueryPackage path, with resolves the latest version from upstream). Otherwise, we synthesize a pseudo-version with a zero timestamp and an appropriate major version. Fixes #26241 RELNOTE=yes Change-Id: I14b4c63858c8714cc3e1b05ac52c33de5a16dea9 Reviewed-on: https://go-review.googlesource.com/c/152739 Reviewed-by: Russ Cox <rsc@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com> Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
- Loading branch information
Bryan C. Mills
committed
Dec 6, 2018
1 parent
bae1e70
commit d6c12ec
Showing
3 changed files
with
161 additions
and
3 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,109 @@ | ||
env GO111MODULE=on | ||
|
||
# 'go list -mod=readonly' should not add requirements even if they can be | ||
# resolved locally. | ||
cp go.mod go.mod.orig | ||
! go list -mod=readonly all | ||
cmp go.mod go.mod.orig | ||
|
||
# 'go list' should resolve imports using replacements. | ||
go list all | ||
stdout 'example.com/a/b$' | ||
stdout 'example.com/x/v3$' | ||
stdout 'example.com/y/z/w$' | ||
stdout 'example.com/v' | ||
|
||
# The selected modules should prefer longer paths, | ||
# but should try shorter paths if needed. | ||
# Modules with a major-version suffix should have a corresponding pseudo-version. | ||
# Replacements that specify a version should use the latest such version. | ||
go list -m all | ||
stdout 'example.com/a/b v0.0.0-00010101000000-000000000000 => ./b' | ||
stdout 'example.com/y v0.0.0-00010101000000-000000000000 => ./y' | ||
stdout 'example.com/x/v3 v3.0.0-00010101000000-000000000000 => ./v3' | ||
stdout 'example.com/v v1.12.0 => ./v12' | ||
|
||
-- go.mod -- | ||
module example.com/m | ||
|
||
replace ( | ||
example.com/a => ./a | ||
example.com/a/b => ./b | ||
) | ||
|
||
replace ( | ||
example.com/x => ./x | ||
example.com/x/v3 => ./v3 | ||
) | ||
|
||
replace ( | ||
example.com/y/z/w => ./w | ||
example.com/y => ./y | ||
) | ||
|
||
replace ( | ||
example.com/v v1.11.0 => ./v11 | ||
example.com/v v1.12.0 => ./v12 | ||
example.com/v => ./v | ||
) | ||
|
||
-- m.go -- | ||
package main | ||
import ( | ||
_ "example.com/a/b" | ||
_ "example.com/x/v3" | ||
_ "example.com/y/z/w" | ||
_ "example.com/v" | ||
) | ||
func main() {} | ||
|
||
-- a/go.mod -- | ||
module a.localhost | ||
-- a/a.go -- | ||
package a | ||
-- a/b/b.go-- | ||
package b | ||
|
||
-- b/go.mod -- | ||
module a.localhost/b | ||
-- b/b.go -- | ||
package b | ||
|
||
-- x/go.mod -- | ||
module x.localhost | ||
-- x/x.go -- | ||
package x | ||
-- x/v3.go -- | ||
package v3 | ||
import _ "x.localhost/v3" | ||
|
||
-- v3/go.mod -- | ||
module x.localhost/v3 | ||
-- v3/x.go -- | ||
package x | ||
|
||
-- w/go.mod -- | ||
module w.localhost | ||
-- w/skip/skip.go -- | ||
// Package skip is nested below nonexistent package w. | ||
package skip | ||
|
||
-- y/go.mod -- | ||
module y.localhost | ||
-- y/z/w/w.go -- | ||
package w | ||
|
||
-- v12/go.mod -- | ||
module v.localhost | ||
-- v12/v.go -- | ||
package v | ||
|
||
-- v11/go.mod -- | ||
module v.localhost | ||
-- v11/v.go -- | ||
package v | ||
|
||
-- v/go.mod -- | ||
module v.localhost | ||
-- v/v.go -- | ||
package v |