Skip to content

Commit

Permalink
internal/flags: remove low-use type TextMarshalerFlag (ethereum#30707)
Browse files Browse the repository at this point in the history
  • Loading branch information
gzliudan committed Nov 25, 2024
1 parent 10e9a88 commit 638f515
Show file tree
Hide file tree
Showing 4 changed files with 9 additions and 123 deletions.
6 changes: 4 additions & 2 deletions cmd/XDC/chaincmd.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,6 @@ import (
"github.com/XinFinOrg/XDPoSChain/core/types"
"github.com/XinFinOrg/XDPoSChain/eth/downloader"
"github.com/XinFinOrg/XDPoSChain/event"
"github.com/XinFinOrg/XDPoSChain/internal/flags"
"github.com/XinFinOrg/XDPoSChain/log"
"github.com/XinFinOrg/XDPoSChain/metrics"
"github.com/urfave/cli/v2"
Expand Down Expand Up @@ -397,7 +396,10 @@ func copyDb(ctx *cli.Context) error {
chain, chainDb := utils.MakeChain(ctx, stack)
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)

// Create a source peer to satisfy downloader requests from
Expand Down
9 changes: 5 additions & 4 deletions cmd/utils/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -129,11 +129,10 @@ var (
Category: flags.APICategory,
}

defaultSyncMode = ethconfig.Defaults.SyncMode
SyncModeFlag = &flags.TextMarshalerFlag{
SyncModeFlag = &cli.StringFlag{
Name: "syncmode",
Usage: `Blockchain sync mode ("fast", "full", or "light")`,
Value: &defaultSyncMode,
Value: ethconfig.Defaults.SyncMode.String(),
Category: flags.EthCategory,
}
GCModeFlag = &cli.StringFlag{
Expand Down Expand Up @@ -1340,7 +1339,9 @@ func SetEthConfig(ctx *cli.Context, stack *node.Node, cfg *ethconfig.Config) {

switch {
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):
cfg.SyncMode = downloader.FastSync
case ctx.Bool(LightModeFlag.Name):
Expand Down
114 changes: 0 additions & 114 deletions internal/flags/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
package flags

import (
"encoding"
"errors"
"flag"
"fmt"
Expand Down Expand Up @@ -122,119 +121,6 @@ func (f *DirectoryFlag) GetDefaultText() string {
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 (
_ cli.Flag = (*BigFlag)(nil)
_ cli.RequiredFlag = (*BigFlag)(nil)
Expand Down
3 changes: 0 additions & 3 deletions internal/flags/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -255,9 +255,6 @@ func AutoEnvVars(flags []cli.Flag, prefix string) {
case *BigFlag:
flag.EnvVars = append(flag.EnvVars, envvar)

case *TextMarshalerFlag:
flag.EnvVars = append(flag.EnvVars, envvar)

case *DirectoryFlag:
flag.EnvVars = append(flag.EnvVars, envvar)
}
Expand Down

0 comments on commit 638f515

Please sign in to comment.