if isStandardImportPath(path) || !Enabled() {
return ""
}
-
target := mustFindModule(path, path)
mdeps := make(map[module.Version]bool)
for _, dep := range deps {
var buf bytes.Buffer
fmt.Fprintf(&buf, "path\t%s\n", path)
-
- writeEntry := func(token string, m module.Version) {
- mv := m.Version
+ tv := target.Version
+ if tv == "" {
+ tv = "(devel)"
+ }
+ fmt.Fprintf(&buf, "mod\t%s\t%s\t%s\n", target.Path, tv, modfetch.Sum(target))
+ for _, mod := range mods {
+ mv := mod.Version
if mv == "" {
mv = "(devel)"
}
- fmt.Fprintf(&buf, "%s\t%s\t%s", token, m.Path, mv)
- if r := Replacement(m); r.Path == "" {
- fmt.Fprintf(&buf, "\t%s\n", modfetch.Sum(m))
- } else {
- fmt.Fprintf(&buf, "\n=>\t%s\t%s\t%s\n", r.Path, r.Version, modfetch.Sum(r))
+ r := Replacement(mod)
+ h := ""
+ if r.Path == "" {
+ h = "\t" + modfetch.Sum(mod)
+ }
+ fmt.Fprintf(&buf, "dep\t%s\t%s%s\n", mod.Path, mv, h)
+ if r.Path != "" {
+ fmt.Fprintf(&buf, "=>\t%s\t%s\t%s\n", r.Path, r.Version, modfetch.Sum(r))
}
}
-
- writeEntry("mod", target)
- for _, mod := range mods {
- writeEntry("dep", mod)
- }
-
return buf.String()
}
info, _ := debug.ReadBuildInfo()
fmt.Fprintf(os.Stdout, "path is %s\n", info.Path)
fmt.Fprintf(os.Stdout, "main is %s %s\n", info.Main.Path, info.Main.Version)
- if r := info.Main.Replace; r != nil {
- fmt.Fprintf(os.Stdout, "\t(replaced by %s %s)\n", r.Path, r.Version)
- }
for _, m := range info.Deps {
fmt.Fprintf(os.Stdout, "using %s %s\n", m.Path, m.Version)
- if r := m.Replace; r != nil {
- fmt.Fprintf(os.Stdout, "\t(replaced by %s %s)\n", r.Path, r.Version)
- }
}
}
info, _ := debug.ReadBuildInfo()
fmt.Fprintf(os.Stdout, "path is %s\n", info.Path)
fmt.Fprintf(os.Stdout, "main is %s %s\n", info.Main.Path, info.Main.Version)
- if r := info.Main.Replace; r != nil {
- fmt.Fprintf(os.Stdout, "\t(replaced by %s %s)\n", r.Path, r.Version)
- }
for _, m := range info.Deps {
fmt.Fprintf(os.Stdout, "using %s %s\n", m.Path, m.Version)
- if r := m.Replace; r != nil {
- fmt.Fprintf(os.Stdout, "\t(replaced by %s %s)\n", r.Path, r.Version)
- }
}
}
+++ /dev/null
-[short] skip
-
-go mod download example.com/printversion@v0.1.0 example.com/printversion@v1.0.0
-
-go install example.com/printversion
-
-go run example.com/printversion
-cmp stdout out.txt
-
-go version -m $GOPATH/bin/printversion
-stdout '^.*[/\\]bin[/\\]printversion: .*$'
-stdout '^ path example.com/printversion$'
-stdout '^ mod example.com/printversion v0.1.0$'
-stdout '^ => example.com/printversion v1.0.0 h1:.*$'
-stdout '^ dep example.com/version v1.0.0$'
-stdout '^ => example.com/version v1.0.1 h1:.*$'
-
--- go.mod --
-module golang.org/issue/37392
-go 1.14
-require (
- example.com/printversion v0.1.0
-)
-replace (
- example.com/printversion => example.com/printversion v1.0.0
- example.com/version v1.0.0 => example.com/version v1.0.1
-)
--- out.txt --
-path is example.com/printversion
-main is example.com/printversion v0.1.0
- (replaced by example.com/printversion v1.0.0)
-using example.com/version v1.0.0
- (replaced by example.com/version v1.0.1)
repLine = "=>\t"
)
- 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
- }
+ info := &BuildInfo{}
- var (
- info = &BuildInfo{}
- last *Module
- line string
- ok bool
- )
+ var line string
// Reverse of cmd/go/internal/modload.PackageBuildInfo
for len(data) > 0 {
i := strings.IndexByte(data, '\n')
info.Path = elem
case strings.HasPrefix(line, modLine):
elem := strings.Split(line[len(modLine):], "\t")
- last = &info.Main
- *last, ok = readEntryFirstLine(elem)
- if !ok {
+ if len(elem) != 3 {
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")
- last = new(Module)
- info.Deps = append(info.Deps, last)
- *last, ok = readEntryFirstLine(elem)
- if !ok {
+ if len(elem) != 2 && len(elem) != 3 {
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
}
- if last == nil {
+ last := len(info.Deps) - 1
+ if last < 0 {
return nil, false
}
- last.Replace = &Module{
+ info.Deps[last].Replace = &Module{
Path: elem[0],
Version: elem[1],
Sum: elem[2],
}
- last = nil
}
}
return info, true