Skip to content

Commit

Permalink
Merge pull request #101 from kozmod/bug/100_fix_flags
Browse files Browse the repository at this point in the history
[#100] fix parsing flags
  • Loading branch information
kozmod authored Dec 10, 2024
2 parents c0f4cc3 + 6483ed7 commit 8217776
Show file tree
Hide file tree
Showing 4 changed files with 54 additions and 41 deletions.
20 changes: 5 additions & 15 deletions internal/flag/flags.go
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ const (
defaultConfigFilePath = "progen.yml"

flagKeyConfigFile = "f"
flagKeyVarbose = "v"
flagKeyVerbose = "v"
flagKeyErrorStackTrace = "errtrace"
flagKeyPrintConfig = "printconf"
flagKeyDryRun = "dr"
Expand Down Expand Up @@ -73,23 +73,21 @@ func Parse() Flags {
flagSet := flag.NewFlagSet(args[0], flag.ExitOnError)

var (
flags = Flags{
DefaultFlags: NewDefaultFlags(flagSet),
}
flags = NewFlags(flagSet)
)

err := flags.Parse(flagSet, args[1:])
if err != nil {
log.Fatalf("parse additioanl flags: %v", err)
}
return flags
return *flags
}

func NewDefaultFlags(fs *flag.FlagSet) *DefaultFlags {
var f DefaultFlags
fs.BoolVar(
&f.Verbose,
flagKeyVarbose,
flagKeyVerbose,
false,
"verbose output")
fs.BoolVar(
Expand All @@ -101,7 +99,7 @@ func NewDefaultFlags(fs *flag.FlagSet) *DefaultFlags {
&f.DryRun,
flagKeyDryRun,
false,
"dry run mode (can be combine with `-v`)")
`dry run mode (can be combine with "-v")`)
fs.Var(
&f.MissingKey,
flagKeyMissingKey,
Expand All @@ -116,14 +114,6 @@ func NewDefaultFlags(fs *flag.FlagSet) *DefaultFlags {
return &f
}

func (f *DefaultFlags) Parse(fs *flag.FlagSet, args []string) error {
err := fs.Parse(args)
if err != nil {
return xerrors.Errorf("parse args: %w", err)
}
return nil
}

func NewFlags(fs *flag.FlagSet) *Flags {
var (
f = Flags{DefaultFlags: NewDefaultFlags(fs)}
Expand Down
2 changes: 1 addition & 1 deletion internal/flag/flags_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -291,7 +291,7 @@ func Test_parseFlags(t *testing.T) {

//goland:noinspection SpellCheckingInspection
var (
v = dashPrefixFn(flagKeyVarbose)
v = dashPrefixFn(flagKeyVerbose)
errstack = dashPrefixFn(flagKeyErrorStackTrace)
printconfig = dashPrefixFn(flagKeyPrintConfig)
dr = dashPrefixFn(flagKeyDryRun)
Expand Down
41 changes: 16 additions & 25 deletions pkg/core/engin.go
Original file line number Diff line number Diff line change
@@ -1,17 +1,13 @@
package core

import (
"flag"
"log"
"os"
"sync"

"golang.org/x/xerrors"

"github.com/kozmod/progen/internal/entity"
"github.com/kozmod/progen/internal/exec"
"github.com/kozmod/progen/internal/factory"
engineFlags "github.com/kozmod/progen/internal/flag"
)

type Engin struct {
Expand All @@ -24,8 +20,6 @@ type Engin struct {
rm []entity.Action[[]string]

logger entity.Logger

flags engineFlags.DefaultFlags
}

// AddActions adds action to the [Engin].
Expand All @@ -39,36 +33,33 @@ func (e *Engin) AddActions(actions ...action) *Engin {
}

// Run all actions.
func (e *Engin) Run() error {
var (
args = os.Args
flagSet = flag.NewFlagSet(args[0], flag.ExitOnError)
)
err := e.flags.Parse(flagSet, args)
if err != nil {
log.Printf("parse flags failed: %v", err)
return err
func (e *Engin) Run(config *Config) error {
if config == nil {
config = &Config{}
}

var (
logFatalSuffixFn = entity.NewAppendVPlusOrV(e.flags.PrintErrorStackTrace)
logFatalSuffixFn = entity.NewAppendVPlusOrV(config.PrintErrorStackTrace)
actionFilter factory.DummyActionFilter
)

e.mx.RLock()
defer e.mx.RUnlock()

var logger entity.Logger
var (
logger entity.Logger
err error
)
if e.logger == nil {
logger, err = factory.NewLogger(e.flags.Verbose)
logger, err = factory.NewLogger(config.Verbose)
if err != nil {
return xerrors.Errorf("failed to initialize logger: %w", err)
}
}

procChain, err := factory.NewExecutorChainFactory(
logger,
e.flags.DryRun,
config.DryRun,
func(executors []entity.Executor) entity.Executor {
return exec.NewChain(executors)
},
Expand All @@ -80,16 +71,16 @@ func (e *Engin) Run() error {
factory.NewExecutorBuilderFactory(
e.fsModify,
factory.NewFsModifyExecFactory(
e.flags.TemplateVars.Vars,
[]string{e.flags.MissingKey.String()},
config.TemplateVars.Vars,
[]string{config.MissingKey.String()},
).Create,
actionFilter,
),
factory.NewExecutorBuilderFactory(
e.fsSave,
factory.NewFsSaveExecFactory(
e.flags.TemplateVars.Vars,
[]string{e.flags.MissingKey.String()},
config.TemplateVars.Vars,
[]string{config.MissingKey.String()},
).Create,
actionFilter,
),
Expand All @@ -101,8 +92,8 @@ func (e *Engin) Run() error {
factory.NewExecutorBuilderFactory(
e.files,
factory.NewFileExecutorFactory(
e.flags.TemplateVars.Vars,
[]string{e.flags.MissingKey.String()},
config.TemplateVars.Vars,
[]string{config.MissingKey.String()},
).Create,
actionFilter,
),
Expand Down
32 changes: 32 additions & 0 deletions pkg/core/flags.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
package core

import (
"flag"
"fmt"
"os"

internalFlags "github.com/kozmod/progen/internal/flag"
)

// Config for the [Engin].
type Config internalFlags.DefaultFlags

// AddConfigFlagSet adds flags to [*flag.FlagSet] and creates [Engin] config.
func AddConfigFlagSet(fs *flag.FlagSet) *Config {
f := internalFlags.NewDefaultFlags(fs)
return (*Config)(f)
}

// ParseFlags - parse flags and creates [Engin] config from [*flag.FlagSet].
func ParseFlags() (*Config, error) {
var (
args = os.Args
flagSet = flag.NewFlagSet(args[0], flag.ExitOnError)
f = AddConfigFlagSet(flagSet)
err = flagSet.Parse(args[1:])
)
if err != nil {
return f, fmt.Errorf("parse config from flags: %w", err)
}
return f, nil
}

0 comments on commit 8217776

Please sign in to comment.