mirror of
https://github.com/golang/go
synced 2024-11-26 05:07:59 -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
|
||||
// graph print module requirement graph
|
||||
// init initialize new module in current directory
|
||||
// initwork initialize workspace file
|
||||
// tidy add missing and remove unused modules
|
||||
// vendor make vendored copy of dependencies
|
||||
// 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'.
|
||||
//
|
||||
//
|
||||
// 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
|
||||
//
|
||||
// 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,
|
||||
cmdGraph,
|
||||
cmdInit,
|
||||
cmdInitwork,
|
||||
cmdTidy,
|
||||
cmdVendor,
|
||||
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.
|
||||
//
|
||||
// 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
|
||||
stdout 'Hello from module A'
|
||||
|
||||
@ -31,14 +34,13 @@ directory (
|
||||
b
|
||||
../src/a
|
||||
)
|
||||
-- go.work --
|
||||
-- go.work.want --
|
||||
go 1.17
|
||||
|
||||
directory (
|
||||
./a
|
||||
./b
|
||||
./a
|
||||
./b
|
||||
)
|
||||
|
||||
-- a/go.mod --
|
||||
|
||||
module example.com/a
|
||||
|
Loading…
Reference in New Issue
Block a user