separate Setup() and Run() steps

This commit is contained in:
risk danger olson 2013-09-22 19:08:31 -06:00 committed by Rick Olson
parent a95a2d7561
commit 0671b841f2
3 changed files with 54 additions and 39 deletions

@ -0,0 +1,29 @@
package gitmedia
import (
core ".."
"fmt"
)
type VersionCommand struct {
LovesComics bool
*Command
}
func (c *VersionCommand) Setup() {
c.FlagSet.BoolVar(&c.LovesComics, "comics", false, "easter egg")
}
func (c *VersionCommand) Run() {
if c.LovesComics {
fmt.Println("Nothing may see Gah Lak Tus and survive.")
} else {
fmt.Printf("git-media version %s\n", core.Version)
}
}
func init() {
registerCommand("version", func(c *Command) RunnableCommand {
return &VersionCommand{Command: c}
})
}

@ -6,26 +6,23 @@ import (
"os"
)
var commands = make(map[string]*Command)
var commands = make(map[string]func(*Command) RunnableCommand)
func Run() {
subcommand := SubCommand()
cmd, ok := commands[subcommand]
basecmd := NewCommand()
cmdcb, ok := commands[subcommand]
if ok {
cmd := cmdcb(basecmd)
cmd.Setup()
cmd.Parse()
cmd.Run()
} else {
missingCommand(subcommand)
}
}
func registerCommand(name string, cmd *Command) {
commands[name] = cmd
}
func missingCommand(cmd string) {
fmt.Printf("git-media: '%s' is not a git-media command. See git-media help.\n", cmd)
}
func SubCommand() string {
if len(os.Args) < 2 {
return "version"
@ -34,29 +31,37 @@ func SubCommand() string {
}
}
func NewCommand(run func(*Command)) *Command {
func NewCommand() *Command {
var args []string
if len(os.Args) > 1 {
args = os.Args[2:]
}
return &Command{
FlagSet: flag.NewFlagSet(os.Args[0], flag.ExitOnError),
Args: args,
run: run,
}
return &Command{flag.NewFlagSet(os.Args[0], flag.ExitOnError), args}
}
type RunnableCommand interface {
Setup()
Parse()
Run()
}
type Command struct {
run func(c *Command)
FlagSet *flag.FlagSet
Args []string
}
func (c *Command) parse() {
func (c *Command) Parse() {
c.FlagSet.Parse(c.Args)
}
func (c *Command) Run() {
c.run(c)
func (c *Command) Setup() {}
func (c *Command) Run() {}
func registerCommand(name string, cmdcb func(*Command) RunnableCommand) {
commands[name] = cmdcb
}
func missingCommand(cmd string) {
fmt.Printf("git-media: '%s' is not a git-media command. See git-media help.\n", cmd)
}

@ -1,19 +0,0 @@
package gitmedia
import (
core ".."
"fmt"
)
func init() {
registerCommand("version", NewCommand(func(c *Command) {
comics := c.FlagSet.Bool("comics", false, "easter egg")
c.parse()
if *comics {
fmt.Println("Nothing may see Gah Lak Tus and survive.")
} else {
fmt.Printf("git-media version %s\n", core.Version)
}
}))
}