Version: m.Version,
Main: true,
Dir: ModRoot,
+ GoMod: filepath.Join(ModRoot, "go.mod"),
}
}
m.Version = q.Version
m.Time = &q.Time
}
- dir, err := modfetch.DownloadDir(module.Version{Path: m.Path, Version: m.Version})
+
+ mod := module.Version{Path: m.Path, Version: m.Version}
+ gomod, err := modfetch.CachePath(mod, "mod")
+ if err == nil {
+ if info, err := os.Stat(gomod); err == nil && info.Mode().IsRegular() {
+ m.GoMod = gomod
+ }
+ }
+ dir, err := modfetch.DownloadDir(mod)
if err == nil {
if info, err := os.Stat(dir); err == nil && info.IsDir() {
m.Dir = dir
}
complete(info.Replace)
info.Dir = info.Replace.Dir
+ info.GoMod = filepath.Join(info.Dir, "go.mod")
info.Error = nil // ignore error loading original module version (it has been replaced)
}
allowWriteGoMod = true
}
+// MinReqs returns a Reqs with minimal dependencies of Target,
+// as will be written to go.mod.
+func MinReqs() mvs.Reqs {
+ var direct []string
+ for _, m := range buildList[1:] {
+ if loaded.direct[m.Path] {
+ direct = append(direct, m.Path)
+ }
+ }
+ min, err := mvs.Req(Target, buildList, direct, Reqs())
+ if err != nil {
+ base.Fatalf("go: %v", err)
+ }
+ return &mvsReqs{buildList: append([]module.Version{Target}, min...)}
+}
+
// WriteGoMod writes the current build list back to go.mod.
func WriteGoMod() {
if !allowWriteGoMod {
modfetch.WriteGoSum()
if loaded != nil {
- var direct []string
- for _, m := range buildList[1:] {
- if loaded.direct[m.Path] {
- direct = append(direct, m.Path)
- }
- }
- min, err := mvs.Req(Target, buildList, direct, Reqs())
+ reqs := MinReqs()
+ min, err := reqs.Required(Target)
if err != nil {
base.Fatalf("go: %v", err)
}
--- /dev/null
+env GO111MODULE=on
+
+go mod -graph
+stdout '^m rsc.io/quote@v1.5.2$'
+stdout '^rsc.io/quote@v1.5.2 rsc.io/sampler@v1.3.0$'
+! stdout '^m rsc.io/sampler@v1.3.0$'
+
+-- go.mod --
+module m
+require rsc.io/quote v1.5.2