diff --git a/cmd/mailfull/mailfull.go b/cmd/mailfull/mailfull.go deleted file mode 100644 index c2fb110..0000000 --- a/cmd/mailfull/mailfull.go +++ /dev/null @@ -1,144 +0,0 @@ -/* -Command mailfull is a CLI application using the mailfull package. -*/ -package main - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/directorz/mailfull-go" - "github.com/mitchellh/cli" -) - -var ( - version = mailfull.Version - gittag = "" -) - -func init() { - if gittag != "" { - version = version + "-" + gittag - } -} - -func main() { - c := &cli.CLI{ - Name: filepath.Base(os.Args[0]), - Version: version, - Args: os.Args[1:], - } - - meta := Meta{ - UI: &cli.BasicUi{ - Reader: os.Stdin, - Writer: os.Stdout, - ErrorWriter: os.Stderr, - }, - CmdName: c.Name, - Version: c.Version, - } - - c.Commands = map[string]cli.CommandFactory{ - "init": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &InitCommand{Meta: meta}, nil - }, - "genconfig": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &GenConfigCommand{Meta: meta}, nil - }, - "domains": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &DomainsCommand{Meta: meta}, nil - }, - "domainadd": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &DomainAddCommand{Meta: meta}, nil - }, - "domaindel": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &DomainDelCommand{Meta: meta}, nil - }, - "domaindisable": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &DomainDisableCommand{Meta: meta}, nil - }, - "domainenable": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &DomainEnableCommand{Meta: meta}, nil - }, - "aliasdomains": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasDomainsCommand{Meta: meta}, nil - }, - "aliasdomainadd": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasDomainAddCommand{Meta: meta}, nil - }, - "aliasdomaindel": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasDomainDelCommand{Meta: meta}, nil - }, - "users": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &UsersCommand{Meta: meta}, nil - }, - "useradd": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &UserAddCommand{Meta: meta}, nil - }, - "userdel": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &UserDelCommand{Meta: meta}, nil - }, - "userpasswd": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &UserPasswdCommand{Meta: meta}, nil - }, - "usercheckpw": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &UserCheckPwCommand{Meta: meta}, nil - }, - "aliasusers": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasUsersCommand{Meta: meta}, nil - }, - "aliasuseradd": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasUserAddCommand{Meta: meta}, nil - }, - "aliasusermod": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasUserModCommand{Meta: meta}, nil - }, - "aliasuserdel": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &AliasUserDelCommand{Meta: meta}, nil - }, - "catchall": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &CatchAllCommand{Meta: meta}, nil - }, - "catchallset": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &CatchAllSetCommand{Meta: meta}, nil - }, - "catchallunset": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &CatchAllUnsetCommand{Meta: meta}, nil - }, - "commit": func() (cli.Command, error) { - meta.SubCmdName = c.Subcommand() - return &CommitCommand{Meta: meta}, nil - }, - } - - exitCode, err := c.Run() - if err != nil { - fmt.Fprintf(meta.UI.ErrorWriter, "%v\n", err) - } - - os.Exit(exitCode) -} diff --git a/cmd/mailfull/main.go b/cmd/mailfull/main.go index b64a8e9..c2fb110 100644 --- a/cmd/mailfull/main.go +++ b/cmd/mailfull/main.go @@ -1,30 +1,144 @@ +/* +Command mailfull is a CLI application using the mailfull package. +*/ package main import ( - "bytes" - "flag" + "fmt" + "os" + "path/filepath" + "github.com/directorz/mailfull-go" "github.com/mitchellh/cli" ) -// Meta is for `*Command` struct. -type Meta struct { - UI *cli.BasicUi - CmdName string - SubCmdName string - Version string +var ( + version = mailfull.Version + gittag = "" +) + +func init() { + if gittag != "" { + version = version + "-" + gittag + } } -// noCommitFlag returns true if `pargs` has "-n" flag. -// `pargs` is overwrites with non-flag arguments. -func noCommitFlag(pargs *[]string) (bool, error) { - nFlag := false +func main() { + c := &cli.CLI{ + Name: filepath.Base(os.Args[0]), + Version: version, + Args: os.Args[1:], + } - flagSet := flag.NewFlagSet("", flag.ContinueOnError) - flagSet.SetOutput(&bytes.Buffer{}) - flagSet.BoolVar(&nFlag, "n", nFlag, "") - err := flagSet.Parse(*pargs) - *pargs = flagSet.Args() + meta := Meta{ + UI: &cli.BasicUi{ + Reader: os.Stdin, + Writer: os.Stdout, + ErrorWriter: os.Stderr, + }, + CmdName: c.Name, + Version: c.Version, + } - return nFlag, err + c.Commands = map[string]cli.CommandFactory{ + "init": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &InitCommand{Meta: meta}, nil + }, + "genconfig": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &GenConfigCommand{Meta: meta}, nil + }, + "domains": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &DomainsCommand{Meta: meta}, nil + }, + "domainadd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &DomainAddCommand{Meta: meta}, nil + }, + "domaindel": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &DomainDelCommand{Meta: meta}, nil + }, + "domaindisable": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &DomainDisableCommand{Meta: meta}, nil + }, + "domainenable": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &DomainEnableCommand{Meta: meta}, nil + }, + "aliasdomains": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasDomainsCommand{Meta: meta}, nil + }, + "aliasdomainadd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasDomainAddCommand{Meta: meta}, nil + }, + "aliasdomaindel": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasDomainDelCommand{Meta: meta}, nil + }, + "users": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &UsersCommand{Meta: meta}, nil + }, + "useradd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &UserAddCommand{Meta: meta}, nil + }, + "userdel": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &UserDelCommand{Meta: meta}, nil + }, + "userpasswd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &UserPasswdCommand{Meta: meta}, nil + }, + "usercheckpw": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &UserCheckPwCommand{Meta: meta}, nil + }, + "aliasusers": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasUsersCommand{Meta: meta}, nil + }, + "aliasuseradd": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasUserAddCommand{Meta: meta}, nil + }, + "aliasusermod": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasUserModCommand{Meta: meta}, nil + }, + "aliasuserdel": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &AliasUserDelCommand{Meta: meta}, nil + }, + "catchall": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &CatchAllCommand{Meta: meta}, nil + }, + "catchallset": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &CatchAllSetCommand{Meta: meta}, nil + }, + "catchallunset": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &CatchAllUnsetCommand{Meta: meta}, nil + }, + "commit": func() (cli.Command, error) { + meta.SubCmdName = c.Subcommand() + return &CommitCommand{Meta: meta}, nil + }, + } + + exitCode, err := c.Run() + if err != nil { + fmt.Fprintf(meta.UI.ErrorWriter, "%v\n", err) + } + + os.Exit(exitCode) } diff --git a/cmd/mailfull/meta.go b/cmd/mailfull/meta.go new file mode 100644 index 0000000..b64a8e9 --- /dev/null +++ b/cmd/mailfull/meta.go @@ -0,0 +1,30 @@ +package main + +import ( + "bytes" + "flag" + + "github.com/mitchellh/cli" +) + +// Meta is for `*Command` struct. +type Meta struct { + UI *cli.BasicUi + CmdName string + SubCmdName string + Version string +} + +// noCommitFlag returns true if `pargs` has "-n" flag. +// `pargs` is overwrites with non-flag arguments. +func noCommitFlag(pargs *[]string) (bool, error) { + nFlag := false + + flagSet := flag.NewFlagSet("", flag.ContinueOnError) + flagSet.SetOutput(&bytes.Buffer{}) + flagSet.BoolVar(&nFlag, "n", nFlag, "") + err := flagSet.Parse(*pargs) + *pargs = flagSet.Args() + + return nFlag, err +}