mirror of https://github.com/golang/go.git
79 lines
2.1 KiB
Go
79 lines
2.1 KiB
Go
// Copyright 2017 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.
|
|
|
|
package base
|
|
|
|
import (
|
|
"flag"
|
|
|
|
"cmd/go/internal/cfg"
|
|
"cmd/go/internal/fsys"
|
|
"cmd/go/internal/str"
|
|
)
|
|
|
|
// A StringsFlag is a command-line flag that interprets its argument
|
|
// as a space-separated list of possibly-quoted strings.
|
|
type StringsFlag []string
|
|
|
|
func (v *StringsFlag) Set(s string) error {
|
|
var err error
|
|
*v, err = str.SplitQuotedFields(s)
|
|
if *v == nil {
|
|
*v = []string{}
|
|
}
|
|
return err
|
|
}
|
|
|
|
func (v *StringsFlag) String() string {
|
|
return "<StringsFlag>"
|
|
}
|
|
|
|
// explicitStringFlag is like a regular string flag, but it also tracks whether
|
|
// the string was set explicitly to a non-empty value.
|
|
type explicitStringFlag struct {
|
|
value *string
|
|
explicit *bool
|
|
}
|
|
|
|
func (f explicitStringFlag) String() string {
|
|
if f.value == nil {
|
|
return ""
|
|
}
|
|
return *f.value
|
|
}
|
|
|
|
func (f explicitStringFlag) Set(v string) error {
|
|
*f.value = v
|
|
if v != "" {
|
|
*f.explicit = true
|
|
}
|
|
return nil
|
|
}
|
|
|
|
// AddBuildFlagsNX adds the -n and -x build flags to the flag set.
|
|
func AddBuildFlagsNX(flags *flag.FlagSet) {
|
|
flags.BoolVar(&cfg.BuildN, "n", false, "")
|
|
flags.BoolVar(&cfg.BuildX, "x", false, "")
|
|
}
|
|
|
|
// AddModFlag adds the -mod build flag to the flag set.
|
|
func AddModFlag(flags *flag.FlagSet) {
|
|
flags.Var(explicitStringFlag{value: &cfg.BuildMod, explicit: &cfg.BuildModExplicit}, "mod", "")
|
|
}
|
|
|
|
// AddWorkfileFlag adds the workfile flag to the flag set. It enables workspace
|
|
// mode for commands that support it by resetting the cfg.WorkFile variable
|
|
// to "" (equivalent to auto) rather than off.
|
|
func AddWorkfileFlag(flags *flag.FlagSet) {
|
|
flags.Var(explicitStringFlag{value: &cfg.WorkFile, explicit: &cfg.WorkFileExplicit}, "workfile", "")
|
|
}
|
|
|
|
// AddModCommonFlags adds the module-related flags common to build commands
|
|
// and 'go mod' subcommands.
|
|
func AddModCommonFlags(flags *flag.FlagSet) {
|
|
flags.BoolVar(&cfg.ModCacheRW, "modcacherw", false, "")
|
|
flags.StringVar(&cfg.ModFile, "modfile", "", "")
|
|
flags.StringVar(&fsys.OverlayFile, "overlay", "", "")
|
|
}
|