]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: fix spurious edges in mod -graph output
authorRuss Cox <rsc@golang.org>
Tue, 24 Jul 2018 19:05:11 +0000 (15:05 -0400)
committerRuss Cox <rsc@golang.org>
Sat, 28 Jul 2018 01:15:00 +0000 (01:15 +0000)
The mod -graph output was showing every dependency
as an edge from the main module, instead of showing only
the things that are listed in go.mod.

Fixes #26489.

Change-Id: I248fedb1fc9225e2a7a9ddc2f4a84520b3a96138
Reviewed-on: https://go-review.googlesource.com/125657
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/internal/modcmd/mod.go
src/cmd/go/internal/modload/build.go
src/cmd/go/internal/modload/init.go
src/cmd/go/testdata/script/mod_graph.txt [new file with mode: 0644]

index ec93431085f4a4c5ba6b8b9e3c10fdcbb45fc01f..f3eef6f8e7ada7b41d02dcbf5fd643c5ff5825d1 100644 (file)
@@ -496,7 +496,7 @@ func modPrintJSON() {
 
 // modPrintGraph prints the -graph output.
 func modPrintGraph() {
-       reqs := modload.Reqs()
+       reqs := modload.MinReqs()
 
        format := func(m module.Version) string {
                if m.Version == "" {
index 85172e805b668343bc3eca15af88ea17092eb19c..a5ff4bcc99235ee7765479641c925ccbadd3b495 100644 (file)
@@ -91,6 +91,7 @@ func moduleInfo(m module.Version, fromBuildList bool) *modinfo.ModulePublic {
                        Version: m.Version,
                        Main:    true,
                        Dir:     ModRoot,
+                       GoMod:   filepath.Join(ModRoot, "go.mod"),
                }
        }
 
@@ -114,7 +115,15 @@ func moduleInfo(m module.Version, fromBuildList bool) *modinfo.ModulePublic {
                                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
@@ -142,6 +151,7 @@ func moduleInfo(m module.Version, fromBuildList bool) *modinfo.ModulePublic {
                }
                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)
        }
 
index 7838af2ba7acf2444d123836809f2211eafe1003..676038d24d67b4e83bbecb26f1879c6ff1e6d5da 100644 (file)
@@ -474,6 +474,22 @@ func AllowWriteGoMod() {
        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 {
@@ -483,13 +499,8 @@ func WriteGoMod() {
        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)
                }
diff --git a/src/cmd/go/testdata/script/mod_graph.txt b/src/cmd/go/testdata/script/mod_graph.txt
new file mode 100644 (file)
index 0000000..a97fb8e
--- /dev/null
@@ -0,0 +1,10 @@
+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