mirror of
https://github.com/ethereum/go-ethereum.git
synced 2026-07-16 09:50:45 +00:00
internal/flags: remove low-use type TextMarshalerFlag (#30707)
This commit is contained in:
parent
a6192a5980
commit
ae56946690
4 changed files with 9 additions and 123 deletions
|
|
@ -34,7 +34,6 @@ import (
|
||||||
"github.com/XinFinOrg/XDPoSChain/core/types"
|
"github.com/XinFinOrg/XDPoSChain/core/types"
|
||||||
"github.com/XinFinOrg/XDPoSChain/eth/downloader"
|
"github.com/XinFinOrg/XDPoSChain/eth/downloader"
|
||||||
"github.com/XinFinOrg/XDPoSChain/event"
|
"github.com/XinFinOrg/XDPoSChain/event"
|
||||||
"github.com/XinFinOrg/XDPoSChain/internal/flags"
|
|
||||||
"github.com/XinFinOrg/XDPoSChain/log"
|
"github.com/XinFinOrg/XDPoSChain/log"
|
||||||
"github.com/XinFinOrg/XDPoSChain/metrics"
|
"github.com/XinFinOrg/XDPoSChain/metrics"
|
||||||
"github.com/urfave/cli/v2"
|
"github.com/urfave/cli/v2"
|
||||||
|
|
@ -409,7 +408,10 @@ func copyDb(ctx *cli.Context) error {
|
||||||
chain, chainDb := utils.MakeChain(ctx, stack)
|
chain, chainDb := utils.MakeChain(ctx, stack)
|
||||||
defer chainDb.Close()
|
defer chainDb.Close()
|
||||||
|
|
||||||
syncmode := *flags.GlobalTextMarshaler(ctx, utils.SyncModeFlag.Name).(*downloader.SyncMode)
|
var syncmode downloader.SyncMode
|
||||||
|
if err := syncmode.UnmarshalText([]byte(ctx.String(utils.SyncModeFlag.Name))); err != nil {
|
||||||
|
utils.Fatalf("invalid --syncmode flag: %v", err)
|
||||||
|
}
|
||||||
dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil, nil)
|
dl := downloader.New(syncmode, chainDb, new(event.TypeMux), chain, nil, nil, nil)
|
||||||
|
|
||||||
// Create a source peer to satisfy downloader requests from
|
// Create a source peer to satisfy downloader requests from
|
||||||
|
|
|
||||||
|
|
@ -129,11 +129,10 @@ var (
|
||||||
Category: flags.APICategory,
|
Category: flags.APICategory,
|
||||||
}
|
}
|
||||||
|
|
||||||
defaultSyncMode = ethconfig.Defaults.SyncMode
|
SyncModeFlag = &cli.StringFlag{
|
||||||
SyncModeFlag = &flags.TextMarshalerFlag{
|
|
||||||
Name: "syncmode",
|
Name: "syncmode",
|
||||||
Usage: `Blockchain sync mode ("fast", "full", or "light")`,
|
Usage: `Blockchain sync mode ("fast", "full", or "light")`,
|
||||||
Value: &defaultSyncMode,
|
Value: ethconfig.Defaults.SyncMode.String(),
|
||||||
Category: flags.EthCategory,
|
Category: flags.EthCategory,
|
||||||
}
|
}
|
||||||
GCModeFlag = &cli.StringFlag{
|
GCModeFlag = &cli.StringFlag{
|
||||||
|
|
@ -1340,7 +1339,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {
|
||||||
|
|
||||||
switch {
|
switch {
|
||||||
case ctx.IsSet(SyncModeFlag.Name):
|
case ctx.IsSet(SyncModeFlag.Name):
|
||||||
cfg.SyncMode = *flags.GlobalTextMarshaler(ctx, SyncModeFlag.Name).(*downloader.SyncMode)
|
if err = cfg.SyncMode.UnmarshalText([]byte(ctx.String(SyncModeFlag.Name))); err != nil {
|
||||||
|
Fatalf("invalid --syncmode flag: %v", err)
|
||||||
|
}
|
||||||
case ctx.Bool(FastSyncFlag.Name):
|
case ctx.Bool(FastSyncFlag.Name):
|
||||||
cfg.SyncMode = downloader.FastSync
|
cfg.SyncMode = downloader.FastSync
|
||||||
case ctx.Bool(LightModeFlag.Name):
|
case ctx.Bool(LightModeFlag.Name):
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@
|
||||||
package flags
|
package flags
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"encoding"
|
|
||||||
"errors"
|
"errors"
|
||||||
"flag"
|
"flag"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
@ -122,119 +121,6 @@ func (f *DirectoryFlag) GetDefaultText() string {
|
||||||
return f.GetValue()
|
return f.GetValue()
|
||||||
}
|
}
|
||||||
|
|
||||||
type TextMarshaler interface {
|
|
||||||
encoding.TextMarshaler
|
|
||||||
encoding.TextUnmarshaler
|
|
||||||
}
|
|
||||||
|
|
||||||
// textMarshalerVal turns a TextMarshaler into a flag.Value
|
|
||||||
type textMarshalerVal struct {
|
|
||||||
v TextMarshaler
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v textMarshalerVal) String() string {
|
|
||||||
if v.v == nil {
|
|
||||||
return ""
|
|
||||||
}
|
|
||||||
text, _ := v.v.MarshalText()
|
|
||||||
return string(text)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (v textMarshalerVal) Set(s string) error {
|
|
||||||
return v.v.UnmarshalText([]byte(s))
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
|
||||||
_ cli.Flag = (*TextMarshalerFlag)(nil)
|
|
||||||
_ cli.RequiredFlag = (*TextMarshalerFlag)(nil)
|
|
||||||
_ cli.VisibleFlag = (*TextMarshalerFlag)(nil)
|
|
||||||
_ cli.DocGenerationFlag = (*TextMarshalerFlag)(nil)
|
|
||||||
_ cli.CategorizableFlag = (*TextMarshalerFlag)(nil)
|
|
||||||
)
|
|
||||||
|
|
||||||
// TextMarshalerFlag wraps a TextMarshaler value.
|
|
||||||
type TextMarshalerFlag struct {
|
|
||||||
Name string
|
|
||||||
|
|
||||||
Category string
|
|
||||||
DefaultText string
|
|
||||||
Usage string
|
|
||||||
|
|
||||||
Required bool
|
|
||||||
Hidden bool
|
|
||||||
HasBeenSet bool
|
|
||||||
|
|
||||||
Value TextMarshaler
|
|
||||||
|
|
||||||
Aliases []string
|
|
||||||
EnvVars []string
|
|
||||||
}
|
|
||||||
|
|
||||||
// For cli.Flag:
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) Names() []string { return append([]string{f.Name}, f.Aliases...) }
|
|
||||||
func (f *TextMarshalerFlag) IsSet() bool { return f.HasBeenSet }
|
|
||||||
func (f *TextMarshalerFlag) String() string { return cli.FlagStringer(f) }
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) Apply(set *flag.FlagSet) error {
|
|
||||||
for _, envVar := range f.EnvVars {
|
|
||||||
envVar = strings.TrimSpace(envVar)
|
|
||||||
if value, found := syscall.Getenv(envVar); found {
|
|
||||||
if err := f.Value.UnmarshalText([]byte(value)); err != nil {
|
|
||||||
return fmt.Errorf("could not parse %q from environment variable %q for flag %s: %s", value, envVar, f.Name, err)
|
|
||||||
}
|
|
||||||
f.HasBeenSet = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
eachName(f, func(name string) {
|
|
||||||
set.Var(textMarshalerVal{f.Value}, name, f.Usage)
|
|
||||||
})
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// For cli.RequiredFlag:
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) IsRequired() bool { return f.Required }
|
|
||||||
|
|
||||||
// For cli.VisibleFlag:
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) IsVisible() bool { return !f.Hidden }
|
|
||||||
|
|
||||||
// For cli.CategorizableFlag:
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) GetCategory() string { return f.Category }
|
|
||||||
|
|
||||||
// For cli.DocGenerationFlag:
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) TakesValue() bool { return true }
|
|
||||||
func (f *TextMarshalerFlag) GetUsage() string { return f.Usage }
|
|
||||||
func (f *TextMarshalerFlag) GetEnvVars() []string { return f.EnvVars }
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) GetValue() string {
|
|
||||||
t, err := f.Value.MarshalText()
|
|
||||||
if err != nil {
|
|
||||||
return "(ERR: " + err.Error() + ")"
|
|
||||||
}
|
|
||||||
return string(t)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (f *TextMarshalerFlag) GetDefaultText() string {
|
|
||||||
if f.DefaultText != "" {
|
|
||||||
return f.DefaultText
|
|
||||||
}
|
|
||||||
return f.GetValue()
|
|
||||||
}
|
|
||||||
|
|
||||||
// GlobalTextMarshaler returns the value of a TextMarshalerFlag from the global flag set.
|
|
||||||
func GlobalTextMarshaler(ctx *cli.Context, name string) TextMarshaler {
|
|
||||||
val := ctx.Generic(name)
|
|
||||||
if val == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
return val.(textMarshalerVal).v
|
|
||||||
}
|
|
||||||
|
|
||||||
var (
|
var (
|
||||||
_ cli.Flag = (*BigFlag)(nil)
|
_ cli.Flag = (*BigFlag)(nil)
|
||||||
_ cli.RequiredFlag = (*BigFlag)(nil)
|
_ cli.RequiredFlag = (*BigFlag)(nil)
|
||||||
|
|
|
||||||
|
|
@ -255,9 +255,6 @@ func AutoEnvVars(flags []cli.Flag, prefix string) {
|
||||||
case *BigFlag:
|
case *BigFlag:
|
||||||
flag.EnvVars = append(flag.EnvVars, envvar)
|
flag.EnvVars = append(flag.EnvVars, envvar)
|
||||||
|
|
||||||
case *TextMarshalerFlag:
|
|
||||||
flag.EnvVars = append(flag.EnvVars, envvar)
|
|
||||||
|
|
||||||
case *DirectoryFlag:
|
case *DirectoryFlag:
|
||||||
flag.EnvVars = append(flag.EnvVars, envvar)
|
flag.EnvVars = append(flag.EnvVars, envvar)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue