aboutsummaryrefslogtreecommitdiff
path: root/src/cmd/go/internal/modload/init.go
diff options
context:
space:
mode:
authorJay Conrod <jayconrod@google.com>2020-10-23 11:10:10 -0400
committerJay Conrod <jayconrod@google.com>2020-10-23 20:54:25 +0000
commit5f616a6fe789622f3e0ed0e8a00db9471e2a02f4 (patch)
tree7a1e96e829e3373d5e5f648a4454b6fd5145f4d1 /src/cmd/go/internal/modload/init.go
parentd05e89a8fd35bb543df6a29faea81a85565db92f (diff)
downloadgo-5f616a6fe789622f3e0ed0e8a00db9471e2a02f4.tar.gz
go-5f616a6fe789622f3e0ed0e8a00db9471e2a02f4.zip
cmd/go: in 'go mod init', suggest running 'go mod tidy'
When 'go mod init' is run in an existing project, it may import requirements from a vendor configuration file, but the requirements may not be complete, and go.sum won't contain sums for module zips. With -mod=readonly, the next build command is likely to fail. 'go mod init' will now suggest running 'go mod tidy' if there are .go files or subdirectories in the current directory. We could potentially run 'go mod tidy' automatically within 'go mod init', but it seems better to guide users to using 'go mod tidy' as a separate command to fix missing dependencies. For #41712 Updates #40278 Change-Id: Iaece607f291244588a732ef4c5d576108965ca91 Reviewed-on: https://go-review.googlesource.com/c/go/+/264622 Trust: Jay Conrod <jayconrod@google.com> Run-TryBot: Jay Conrod <jayconrod@google.com> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Bryan C. Mills <bcmills@google.com>
Diffstat (limited to 'src/cmd/go/internal/modload/init.go')
-rw-r--r--src/cmd/go/internal/modload/init.go23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/cmd/go/internal/modload/init.go b/src/cmd/go/internal/modload/init.go
index 7a8d826994..f5aac4b220 100644
--- a/src/cmd/go/internal/modload/init.go
+++ b/src/cmd/go/internal/modload/init.go
@@ -435,6 +435,29 @@ func CreateModFile(ctx context.Context, modPath string) {
modFileToBuildList()
WriteGoMod()
+
+ // Suggest running 'go mod tidy' unless the project is empty. Even if we
+ // imported all the correct requirements above, we're probably missing
+ // some sums, so the next build command in -mod=readonly will likely fail.
+ //
+ // We look for non-hidden .go files or subdirectories to determine whether
+ // this is an existing project. Walking the tree for packages would be more
+ // accurate, but could take much longer.
+ empty := true
+ fis, _ := ioutil.ReadDir(modRoot)
+ for _, fi := range fis {
+ name := fi.Name()
+ if strings.HasPrefix(name, ".") || strings.HasPrefix(name, "_") {
+ continue
+ }
+ if strings.HasSuffix(name, ".go") || fi.IsDir() {
+ empty = false
+ break
+ }
+ }
+ if !empty {
+ fmt.Fprintf(os.Stderr, "go: run 'go mod tidy' to add module requirements and sums\n")
+ }
}
// checkModulePathLax checks that the path meets some minimum requirements