feat: add --verbose flag (#5)

* feat: add --verbose flag

* refactor: app run default RunHelp

* feat: add flags to action

* feat: add log verbose for all commands

Co-authored-by: Tran Hau <ngtranhau@gmail.com>
main
sudo pacman -Syu 2021-04-15 14:43:51 +07:00 committed by GitHub
parent 3ac06c6082
commit 1b1e813024
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 54 additions and 9 deletions

59
main.go
View File

@ -2,6 +2,7 @@ package main
import ( import (
"fmt" "fmt"
"log"
"os" "os"
"runtime" "runtime"
@ -11,15 +12,27 @@ import (
const ( const (
appName = "dotfiles" appName = "dotfiles"
appUsage = "managing dotfiles"
// flags
verboseFlag = "verbose"
// commands
installCommand = "install" installCommand = "install"
updateCommand = "update" updateCommand = "update"
cleanCommand = "clean" cleanCommand = "clean"
// usages
verboseUsage = "show what is going on"
installUsage = "install user configs from dotfiles"
updateUsage = "update dotfiles from user configs"
cleanUsage = "clean unused dotfiles"
currentDir = "." currentDir = "."
) )
var ( var (
// aliases
installAliases = []string{"i"} installAliases = []string{"i"}
updateAliases = []string{"u"} updateAliases = []string{"u"}
cleanAliases = []string{"c"} cleanAliases = []string{"c"}
@ -42,28 +55,34 @@ func main() {
app := &cli.App{ app := &cli.App{
Name: appName, Name: appName,
Usage: "managing dotfiles", Usage: appUsage,
Commands: []*cli.Command{ Commands: []*cli.Command{
{ {
Name: installCommand, Name: installCommand,
Aliases: installAliases, Aliases: installAliases,
Usage: "install user configs from dotfiles", Usage: installUsage,
Flags: []cli.Flag{
&cli.BoolFlag{
Name: verboseFlag,
Usage: verboseUsage,
},
},
Action: a.RunInstall, Action: a.RunInstall,
}, },
{ {
Name: updateCommand, Name: updateCommand,
Aliases: updateAliases, Aliases: updateAliases,
Usage: "update dotfiles from user configs", Usage: updateUsage,
Action: a.RunUpdate, Action: a.RunUpdate,
}, },
{ {
Name: cleanCommand, Name: cleanCommand,
Aliases: cleanAliases, Aliases: cleanAliases,
Usage: "clean unused dotfiles", Usage: cleanUsage,
Action: a.RunClean, Action: a.RunClean,
}, },
}, },
Action: a.Run, Action: a.RunHelp,
} }
if err := app.Run(os.Args); err != nil { if err := app.Run(os.Args); err != nil {
@ -71,18 +90,26 @@ func main() {
} }
} }
type action struct{} type action struct {
flags struct {
verbose bool
}
}
// Show help by default // Show help by default
func (a *action) Run(c *cli.Context) error { func (a *action) RunHelp(c *cli.Context) error {
return cli.ShowAppHelp(c) return cli.ShowAppHelp(c)
} }
func (a *action) RunInstall(c *cli.Context) error { func (a *action) RunInstall(c *cli.Context) error {
a.getFlags(c)
a.log("start %s\n", installCommand)
cfg, err := LoadConfig(currentDir) cfg, err := LoadConfig(currentDir)
if err != nil { if err != nil {
return fmt.Errorf("failed to load config: %w", err) return fmt.Errorf("failed to load config: %w", err)
} }
a.log("config %+v\n", cfg)
if err := cfg.Install(); err != nil { if err := cfg.Install(); err != nil {
return fmt.Errorf("failed to install config: %w", err) return fmt.Errorf("failed to install config: %w", err)
@ -92,10 +119,14 @@ func (a *action) RunInstall(c *cli.Context) error {
} }
func (a *action) RunUpdate(c *cli.Context) error { func (a *action) RunUpdate(c *cli.Context) error {
a.getFlags(c)
a.log("start %s\n", updateCommand)
cfg, err := LoadConfig(currentDir) cfg, err := LoadConfig(currentDir)
if err != nil { if err != nil {
return fmt.Errorf("failed to load config: %w", err) return fmt.Errorf("failed to load config: %w", err)
} }
a.log("config %+v\n", cfg)
if err := cfg.Update(); err != nil { if err := cfg.Update(); err != nil {
return fmt.Errorf("failed to update config: %w", err) return fmt.Errorf("failed to update config: %w", err)
@ -105,10 +136,14 @@ func (a *action) RunUpdate(c *cli.Context) error {
} }
func (a *action) RunClean(c *cli.Context) error { func (a *action) RunClean(c *cli.Context) error {
a.getFlags(c)
a.log("start %s\n", cleanCommand)
cfg, err := LoadConfig(currentDir) cfg, err := LoadConfig(currentDir)
if err != nil { if err != nil {
return fmt.Errorf("failed to load config: %w", err) return fmt.Errorf("failed to load config: %w", err)
} }
a.log("config %+v\n", cfg)
if err := cfg.Clean(); err != nil { if err := cfg.Clean(); err != nil {
return fmt.Errorf("failed to clean config: %w", err) return fmt.Errorf("failed to clean config: %w", err)
@ -116,3 +151,13 @@ func (a *action) RunClean(c *cli.Context) error {
return nil return nil
} }
func (a *action) getFlags(c *cli.Context) {
a.flags.verbose = c.Bool(verboseFlag)
}
func (a *action) log(format string, v ...interface{}) {
if a.flags.verbose {
log.Printf(format, v...)
}
}