aboutsummaryrefslogtreecommitdiff
path: root/src/runtime
diff options
context:
space:
mode:
authorBryan C. Mills <bcmills@google.com>2020-02-24 11:27:38 -0500
committerBryan C. Mills <bcmills@google.com>2020-02-24 20:11:21 +0000
commite092fc352ad393a4d2f1f7fa641df2d23572ccff (patch)
tree86a8698f999b262ef12b87435ed120170c932116 /src/runtime
parent363cd66d6049aa8199c1e89bcc8ce00915e5a429 (diff)
downloadgo-e092fc352ad393a4d2f1f7fa641df2d23572ccff.tar.xz
cmd/go/internal/modload: record the replacement for the module containing package main in BuildInfo
Fixes #37392 Change-Id: I2cb051e6f556b0af95e059611dda3f62e7c1f21a Reviewed-on: https://go-review.googlesource.com/c/go/+/220645 Run-TryBot: Bryan C. Mills <bcmills@google.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
Diffstat (limited to 'src/runtime')
-rw-r--r--src/runtime/debug/mod.go51
1 files changed, 30 insertions, 21 deletions
diff --git a/src/runtime/debug/mod.go b/src/runtime/debug/mod.go
index 837cd689a0..0381bdcc53 100644
--- a/src/runtime/debug/mod.go
+++ b/src/runtime/debug/mod.go
@@ -47,9 +47,27 @@ func readBuildInfo(data string) (*BuildInfo, bool) {
repLine = "=>\t"
)
- info := &BuildInfo{}
+ readEntryFirstLine := func(elem []string) (Module, bool) {
+ if len(elem) != 2 && len(elem) != 3 {
+ return Module{}, false
+ }
+ sum := ""
+ if len(elem) == 3 {
+ sum = elem[2]
+ }
+ return Module{
+ Path: elem[0],
+ Version: elem[1],
+ Sum: sum,
+ }, true
+ }
- var line string
+ var (
+ info = &BuildInfo{}
+ last *Module
+ line string
+ ok bool
+ )
// Reverse of cmd/go/internal/modload.PackageBuildInfo
for len(data) > 0 {
i := strings.IndexByte(data, '\n')
@@ -63,42 +81,33 @@ func readBuildInfo(data string) (*BuildInfo, bool) {
info.Path = elem
case strings.HasPrefix(line, modLine):
elem := strings.Split(line[len(modLine):], "\t")
- if len(elem) != 3 {
+ last = &info.Main
+ *last, ok = readEntryFirstLine(elem)
+ if !ok {
return nil, false
}
- info.Main = Module{
- Path: elem[0],
- Version: elem[1],
- Sum: elem[2],
- }
case strings.HasPrefix(line, depLine):
elem := strings.Split(line[len(depLine):], "\t")
- if len(elem) != 2 && len(elem) != 3 {
+ last = new(Module)
+ info.Deps = append(info.Deps, last)
+ *last, ok = readEntryFirstLine(elem)
+ if !ok {
return nil, false
}
- sum := ""
- if len(elem) == 3 {
- sum = elem[2]
- }
- info.Deps = append(info.Deps, &Module{
- Path: elem[0],
- Version: elem[1],
- Sum: sum,
- })
case strings.HasPrefix(line, repLine):
elem := strings.Split(line[len(repLine):], "\t")
if len(elem) != 3 {
return nil, false
}
- last := len(info.Deps) - 1
- if last < 0 {
+ if last == nil {
return nil, false
}
- info.Deps[last].Replace = &Module{
+ last.Replace = &Module{
Path: elem[0],
Version: elem[1],
Sum: elem[2],
}
+ last = nil
}
}
return info, true