separate Setup() and Run() steps
This commit is contained in:
parent
a95a2d7561
commit
0671b841f2
29
commands/command_version.go
Normal file
29
commands/command_version.go
Normal file
@ -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"
|
"os"
|
||||||
)
|
)
|
||||||
|
|
||||||
var commands = make(map[string]*Command)
|
var commands = make(map[string]func(*Command) RunnableCommand)
|
||||||
|
|
||||||
func Run() {
|
func Run() {
|
||||||
subcommand := SubCommand()
|
subcommand := SubCommand()
|
||||||
cmd, ok := commands[subcommand]
|
basecmd := NewCommand()
|
||||||
|
|
||||||
|
cmdcb, ok := commands[subcommand]
|
||||||
if ok {
|
if ok {
|
||||||
|
cmd := cmdcb(basecmd)
|
||||||
|
cmd.Setup()
|
||||||
|
cmd.Parse()
|
||||||
cmd.Run()
|
cmd.Run()
|
||||||
} else {
|
} else {
|
||||||
missingCommand(subcommand)
|
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 {
|
func SubCommand() string {
|
||||||
if len(os.Args) < 2 {
|
if len(os.Args) < 2 {
|
||||||
return "version"
|
return "version"
|
||||||
@ -34,29 +31,37 @@ func SubCommand() string {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewCommand(run func(*Command)) *Command {
|
func NewCommand() *Command {
|
||||||
var args []string
|
var args []string
|
||||||
if len(os.Args) > 1 {
|
if len(os.Args) > 1 {
|
||||||
args = os.Args[2:]
|
args = os.Args[2:]
|
||||||
}
|
}
|
||||||
|
|
||||||
return &Command{
|
return &Command{flag.NewFlagSet(os.Args[0], flag.ExitOnError), args}
|
||||||
FlagSet: flag.NewFlagSet(os.Args[0], flag.ExitOnError),
|
}
|
||||||
Args: args,
|
|
||||||
run: run,
|
type RunnableCommand interface {
|
||||||
}
|
Setup()
|
||||||
|
Parse()
|
||||||
|
Run()
|
||||||
}
|
}
|
||||||
|
|
||||||
type Command struct {
|
type Command struct {
|
||||||
run func(c *Command)
|
|
||||||
FlagSet *flag.FlagSet
|
FlagSet *flag.FlagSet
|
||||||
Args []string
|
Args []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Command) parse() {
|
func (c *Command) Parse() {
|
||||||
c.FlagSet.Parse(c.Args)
|
c.FlagSet.Parse(c.Args)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *Command) Run() {
|
func (c *Command) Setup() {}
|
||||||
c.run(c)
|
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)
|
|
||||||
}
|
|
||||||
}))
|
|
||||||
}
|
|
Loading…
Reference in New Issue
Block a user