mirror of
https://github.com/golang/go
synced 2024-11-26 07:47:57 -07:00
[dev.cmdgo] cmd/go: add go mod initwork command
This command is used to create a go.work file with a set of modules given in the arguments to the command. For #45713 Change-Id: I09f8cefc5849dd43c234dc4a37091791fcc02ebe Reviewed-on: https://go-review.googlesource.com/c/go/+/334936 Trust: Michael Matloob <matloob@golang.org> Run-TryBot: Michael Matloob <matloob@golang.org> TryBot-Result: Go Bot <gobot@golang.org> Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
parent
f05f5ceffa
commit
b2205eab0e
@ -1034,6 +1034,7 @@
|
|||||||
// edit edit go.mod from tools or scripts
|
// edit edit go.mod from tools or scripts
|
||||||
// graph print module requirement graph
|
// graph print module requirement graph
|
||||||
// init initialize new module in current directory
|
// init initialize new module in current directory
|
||||||
|
// initwork initialize workspace file
|
||||||
// tidy add missing and remove unused modules
|
// tidy add missing and remove unused modules
|
||||||
// vendor make vendored copy of dependencies
|
// vendor make vendored copy of dependencies
|
||||||
// verify verify dependencies have expected content
|
// verify verify dependencies have expected content
|
||||||
@ -1229,6 +1230,23 @@
|
|||||||
// See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'.
|
// See https://golang.org/ref/mod#go-mod-init for more about 'go mod init'.
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
// Initialize workspace file
|
||||||
|
//
|
||||||
|
// Usage:
|
||||||
|
//
|
||||||
|
// go mod initwork [moddirs]
|
||||||
|
//
|
||||||
|
// go mod initwork initializes and writes a new go.work file in the current
|
||||||
|
// directory, in effect creating a new workspace at the current directory.
|
||||||
|
//
|
||||||
|
// go mod initwork optionally accepts paths to the workspace modules as arguments.
|
||||||
|
// If the argument is omitted, an empty workspace with no modules will be created.
|
||||||
|
//
|
||||||
|
// See the workspaces design proposal at
|
||||||
|
// https://go.googlesource.com/proposal/+/master/design/45713-workspace.md for
|
||||||
|
// more information.
|
||||||
|
//
|
||||||
|
//
|
||||||
// Add missing and remove unused modules
|
// Add missing and remove unused modules
|
||||||
//
|
//
|
||||||
// Usage:
|
// Usage:
|
||||||
|
54
src/cmd/go/internal/modcmd/initwork.go
Normal file
54
src/cmd/go/internal/modcmd/initwork.go
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
// Copyright 2021 The Go Authors. All rights reserved.
|
||||||
|
// Use of this source code is governed by a BSD-style
|
||||||
|
// license that can be found in the LICENSE file.
|
||||||
|
|
||||||
|
// go mod initwork
|
||||||
|
|
||||||
|
package modcmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"cmd/go/internal/base"
|
||||||
|
"cmd/go/internal/modload"
|
||||||
|
"context"
|
||||||
|
"path/filepath"
|
||||||
|
)
|
||||||
|
|
||||||
|
var _ = modload.TODOWorkspaces("Add more documentation below.T hough this is" +
|
||||||
|
"enough for those trying workspaces out, there should be more through" +
|
||||||
|
"documentation if the proposal is accepted.")
|
||||||
|
|
||||||
|
var cmdInitwork = &base.Command{
|
||||||
|
UsageLine: "go mod initwork [moddirs]",
|
||||||
|
Short: "initialize workspace file",
|
||||||
|
Long: `go mod initwork initializes and writes a new go.work file in the current
|
||||||
|
directory, in effect creating a new workspace at the current directory.
|
||||||
|
|
||||||
|
go mod initwork optionally accepts paths to the workspace modules as arguments.
|
||||||
|
If the argument is omitted, an empty workspace with no modules will be created.
|
||||||
|
|
||||||
|
See the workspaces design proposal at
|
||||||
|
https://go.googlesource.com/proposal/+/master/design/45713-workspace.md for
|
||||||
|
more information.
|
||||||
|
`,
|
||||||
|
Run: runInitwork,
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
base.AddModCommonFlags(&cmdInitwork.Flag)
|
||||||
|
base.AddWorkfileFlag(&cmdInitwork.Flag)
|
||||||
|
}
|
||||||
|
|
||||||
|
func runInitwork(ctx context.Context, cmd *base.Command, args []string) {
|
||||||
|
modload.InitWorkfile()
|
||||||
|
|
||||||
|
modload.ForceUseModules = true
|
||||||
|
|
||||||
|
// TODO(matloob): support using the -workfile path
|
||||||
|
// To do that properly, we'll have to make the module directories
|
||||||
|
// make dirs relative to workFile path before adding the paths to
|
||||||
|
// the directory entries
|
||||||
|
|
||||||
|
workFile := filepath.Join(base.Cwd(), "go.work")
|
||||||
|
|
||||||
|
modload.CreateWorkFile(ctx, workFile, args)
|
||||||
|
}
|
@ -25,6 +25,7 @@ See 'go help modules' for an overview of module functionality.
|
|||||||
cmdEdit,
|
cmdEdit,
|
||||||
cmdGraph,
|
cmdGraph,
|
||||||
cmdInit,
|
cmdInit,
|
||||||
|
cmdInitwork,
|
||||||
cmdTidy,
|
cmdTidy,
|
||||||
cmdVendor,
|
cmdVendor,
|
||||||
cmdVerify,
|
cmdVerify,
|
||||||
|
@ -767,6 +767,24 @@ func CreateModFile(ctx context.Context, modPath string) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// CreateWorkFile initializes a new workspace by creating a go.work file.
|
||||||
|
func CreateWorkFile(ctx context.Context, workFile string, modDirs []string) {
|
||||||
|
_ = TODOWorkspaces("Report an error if the file already exists.")
|
||||||
|
|
||||||
|
goV := LatestGoVersion() // Use current Go version by default
|
||||||
|
workF := new(modfile.WorkFile)
|
||||||
|
workF.Syntax = new(modfile.FileSyntax)
|
||||||
|
workF.AddGoStmt(goV)
|
||||||
|
|
||||||
|
for _, dir := range modDirs {
|
||||||
|
_ = TODOWorkspaces("Add the module path of the module.")
|
||||||
|
workF.AddDirectory(dir, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
data := modfile.Format(workF.Syntax)
|
||||||
|
lockedfile.Write(workFile, bytes.NewReader(data), 0644)
|
||||||
|
}
|
||||||
|
|
||||||
// fixVersion returns a modfile.VersionFixer implemented using the Query function.
|
// fixVersion returns a modfile.VersionFixer implemented using the Query function.
|
||||||
//
|
//
|
||||||
// It resolves commit hashes and branch names to versions,
|
// It resolves commit hashes and branch names to versions,
|
||||||
|
10
src/cmd/go/testdata/script/work.txt
vendored
10
src/cmd/go/testdata/script/work.txt
vendored
@ -1,3 +1,6 @@
|
|||||||
|
go mod initwork ./a ./b
|
||||||
|
cmp go.work go.work.want
|
||||||
|
|
||||||
go run example.com/b
|
go run example.com/b
|
||||||
stdout 'Hello from module A'
|
stdout 'Hello from module A'
|
||||||
|
|
||||||
@ -31,14 +34,13 @@ directory (
|
|||||||
b
|
b
|
||||||
../src/a
|
../src/a
|
||||||
)
|
)
|
||||||
-- go.work --
|
-- go.work.want --
|
||||||
go 1.17
|
go 1.17
|
||||||
|
|
||||||
directory (
|
directory (
|
||||||
./a
|
./a
|
||||||
./b
|
./b
|
||||||
)
|
)
|
||||||
|
|
||||||
-- a/go.mod --
|
-- a/go.mod --
|
||||||
|
|
||||||
module example.com/a
|
module example.com/a
|
||||||
|
Loading…
Reference in New Issue
Block a user