1
0
mirror of https://github.com/directorz/mailfull-go.git synced 2025-12-17 17:47:04 +00:00

Implement CLI scaffold

This commit is contained in:
teru
2016-07-31 10:09:32 +09:00
parent 7cac94f0f3
commit 1074ab5b72
4 changed files with 109 additions and 0 deletions

1
.gitignore vendored Normal file
View File

@@ -0,0 +1 @@
/cli/mailfull/mailfull

View File

@@ -0,0 +1,41 @@
package command
import (
"fmt"
"github.com/directorz/mailfull-go"
)
// InitCommand represents a InitCommand.
type InitCommand struct {
Meta
}
// Synopsis returns a one-line synopsis.
func (c *InitCommand) Synopsis() string {
return "Initializes current directory as a Mailfull repository."
}
// Help returns long-form help text.
func (c *InitCommand) Help() string {
txt := fmt.Sprintf(`
Usage:
%s %s
Description:
Initializes current directory as a Mailfull repository.
`,
c.CmdName, c.SubCmdName)
return txt[1:]
}
// Run runs the command and returns the exit status.
func (c *InitCommand) Run(args []string) int {
if err := mailfull.InitRepository("."); err != nil {
fmt.Fprintf(c.UI.ErrorWriter, "[ERR] %v\n", err)
return 1
}
return 0
}

View File

@@ -0,0 +1,13 @@
package command
import (
"github.com/mitchellh/cli"
)
// Meta is for `*Command` struct.
type Meta struct {
UI *cli.BasicUi
CmdName string
SubCmdName string
Version string
}

54
cmd/mailfull/main.go Normal file
View File

@@ -0,0 +1,54 @@
package main
import (
"fmt"
"os"
"path/filepath"
"github.com/directorz/mailfull-go"
"github.com/directorz/mailfull-go/cmd/mailfull/command"
"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 := command.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 &command.InitCommand{Meta: meta}, nil
},
}
exitCode, err := c.Run()
if err != nil {
fmt.Fprintf(meta.UI.ErrorWriter, "%v\n", err)
}
os.Exit(exitCode)
}