]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: in 'go list -m', print effective go.mod file
authorJay Conrod <jayconrod@google.com>
Thu, 19 Dec 2019 18:00:28 +0000 (13:00 -0500)
committerJay Conrod <jayconrod@google.com>
Thu, 19 Dec 2019 19:52:21 +0000 (19:52 +0000)
When the -modfile flag is in use (either explicitly or from GOFLAGS),
'go list -m' will now print the effective go.mod file for the main
module in the GoMod field in -f or -json output.

Fixes #36220
Updates #34506

Change-Id: I89c2ee40f20e07854bb37c6e4e13eeea0cce7b0d
Reviewed-on: https://go-review.googlesource.com/c/go/+/212100
Run-TryBot: Jay Conrod <jayconrod@google.com>
Reviewed-by: Bryan C. Mills <bcmills@google.com>
src/cmd/go/alldocs.go
src/cmd/go/internal/list/list.go
src/cmd/go/internal/modload/build.go
src/cmd/go/testdata/script/modfile_flag.txt

index 54e7a8b5b300edb89ae7c0cda580a1aa1578a1a6..f91a04fb4cc8ffcff1c2ffcaf2a5163489d7e50b 100644 (file)
 //         Main      bool         // is this the main module?
 //         Indirect  bool         // is this module only an indirect dependency of main module?
 //         Dir       string       // directory holding files for this module, if any
-//         GoMod     string       // path to go.mod file for this module, if any
+//         GoMod     string       // path to go.mod file used when loading this module, if any
 //         GoVersion string       // go version used in module
 //         Error     *ModuleError // error loading module
 //     }
 //         Err string // the error itself
 //     }
 //
+// The file GoMod refers to may be outside the module directory if the
+// module is in the module cache or if the -modfile flag is used.
+//
 // The default output is to print the module path and then
 // information about the version and replacement if any.
 // For example, 'go list -m all' might print:
index b393c67ddb25dfe90a777b454d8f8802c510ea79..450228964639c6493da8667c5ebd458f0ee7ef94 100644 (file)
@@ -211,7 +211,7 @@ applied to a Go struct, but now a Module struct:
         Main      bool         // is this the main module?
         Indirect  bool         // is this module only an indirect dependency of main module?
         Dir       string       // directory holding files for this module, if any
-        GoMod     string       // path to go.mod file for this module, if any
+        GoMod     string       // path to go.mod file used when loading this module, if any
         GoVersion string       // go version used in module
         Error     *ModuleError // error loading module
     }
@@ -220,6 +220,9 @@ applied to a Go struct, but now a Module struct:
         Err string // the error itself
     }
 
+The file GoMod refers to may be outside the module directory if the
+module is in the module cache or if the -modfile flag is used.
+
 The default output is to print the module path and then
 information about the version and replacement if any.
 For example, 'go list -m all' might print:
index 5a281a9304da28259249b3f60c8eb7bfd1684b73..6fa47d7400e60015b720251782e8e9b2286f8a9a 100644 (file)
@@ -112,7 +112,7 @@ func moduleInfo(m module.Version, fromBuildList bool) *modinfo.ModulePublic {
                }
                if HasModRoot() {
                        info.Dir = ModRoot()
-                       info.GoMod = filepath.Join(info.Dir, "go.mod")
+                       info.GoMod = ModFilePath()
                        if modFile.Go != nil {
                                info.GoVersion = modFile.Go.Version
                        }
index 1409be9599c455d19dd144e9ede372b45feaee79..f05bf03fbf0e73b4bdcaea143a0485d563d50859 100644 (file)
@@ -11,6 +11,15 @@ cp go.sum go.sum.orig
 go mod init example.com/m
 grep example.com/m go.alt.mod
 
+# 'go env GOMOD' should print the path to the real file.
+# 'go env' does not recognize the '-modfile' flag.
+go env GOMOD
+stdout '^\$WORK[/\\]gopath[/\\]src[/\\]go.mod$'
+
+# 'go list -m' should print the effective go.mod file as GoMod though.
+go list -m -f '{{.GoMod}}'
+stdout '^go.alt.mod$'
+
 # go mod edit should operate on the alternate file
 go mod edit -require rsc.io/quote@v1.5.2
 grep rsc.io/quote go.alt.mod