and -dropreplace editing flags may be repeated, and the changes
are applied in the order given.
+The -go=version flag sets the expected Go language version.
+
The -print flag prints the final go.mod in its text format instead of
writing it back to go.mod.
}
type GoMod struct {
- Module Module
+ Module Module
+ Go string
Require []Require
Exclude []Module
Replace []Replace
}
var (
- editFmt = cmdEdit.Flag.Bool("fmt", false, "")
- // editGo = cmdEdit.Flag.String("go", "", "")
+ editFmt = cmdEdit.Flag.Bool("fmt", false, "")
+ editGo = cmdEdit.Flag.String("go", "", "")
editJSON = cmdEdit.Flag.Bool("json", false, "")
editPrint = cmdEdit.Flag.Bool("print", false, "")
editModule = cmdEdit.Flag.String("module", "", "")
func runEdit(cmd *base.Command, args []string) {
anyFlags :=
*editModule != "" ||
+ *editGo != "" ||
*editJSON ||
*editPrint ||
*editFmt ||
}
}
- // TODO(rsc): Implement -go= once we start advertising it.
+ if *editGo != "" {
+ if !modfile.GoVersionRE.MatchString(*editGo) {
+ base.Fatalf(`go mod: invalid -go option; expecting something like "-go 1.12"`)
+ }
+ }
data, err := ioutil.ReadFile(gomod)
if err != nil {
modFile.AddModuleStmt(modload.CmdModModule)
}
+ if *editGo != "" {
+ if err := modFile.AddGoStmt(*editGo); err != nil {
+ base.Fatalf("go: internal error: %v", err)
+ }
+ }
+
if len(edits) > 0 {
for _, edit := range edits {
edit(modFile)
// fileJSON is the -json output data structure.
type fileJSON struct {
Module module.Version
+ Go string `json:",omitempty"`
Require []requireJSON
Exclude []module.Version
Replace []replaceJSON
func editPrintJSON(modFile *modfile.File) {
var f fileJSON
f.Module = modFile.Module.Mod
+ if modFile.Go != nil {
+ f.Go = modFile.Go.Version
+ }
for _, r := range modFile.Require {
f.Require = append(f.Require, requireJSON{Path: r.Mod.Path, Version: r.Mod.Version, Indirect: r.Indirect})
}