From 1b1e813024d39e47c8c5506c416e61c9759acc0f Mon Sep 17 00:00:00 2001 From: Nguyen Tran Hau Date: Thu, 15 Apr 2021 14:43:51 +0700 Subject: [PATCH] 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 --- main.go | 63 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 54 insertions(+), 9 deletions(-) diff --git a/main.go b/main.go index 281c9c2..0e2cbda 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "fmt" + "log" "os" "runtime" @@ -10,16 +11,28 @@ import ( ) const ( - appName = "dotfiles" + appName = "dotfiles" + appUsage = "managing dotfiles" + // flags + verboseFlag = "verbose" + + // commands installCommand = "install" updateCommand = "update" 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 = "." ) var ( + // aliases installAliases = []string{"i"} updateAliases = []string{"u"} cleanAliases = []string{"c"} @@ -42,28 +55,34 @@ func main() { app := &cli.App{ Name: appName, - Usage: "managing dotfiles", + Usage: appUsage, Commands: []*cli.Command{ { Name: installCommand, Aliases: installAliases, - Usage: "install user configs from dotfiles", - Action: a.RunInstall, + Usage: installUsage, + Flags: []cli.Flag{ + &cli.BoolFlag{ + Name: verboseFlag, + Usage: verboseUsage, + }, + }, + Action: a.RunInstall, }, { Name: updateCommand, Aliases: updateAliases, - Usage: "update dotfiles from user configs", + Usage: updateUsage, Action: a.RunUpdate, }, { Name: cleanCommand, Aliases: cleanAliases, - Usage: "clean unused dotfiles", + Usage: cleanUsage, Action: a.RunClean, }, }, - Action: a.Run, + Action: a.RunHelp, } 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 -func (a *action) Run(c *cli.Context) error { +func (a *action) RunHelp(c *cli.Context) error { return cli.ShowAppHelp(c) } func (a *action) RunInstall(c *cli.Context) error { + a.getFlags(c) + a.log("start %s\n", installCommand) + cfg, err := LoadConfig(currentDir) if err != nil { return fmt.Errorf("failed to load config: %w", err) } + a.log("config %+v\n", cfg) if err := cfg.Install(); err != nil { 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 { + a.getFlags(c) + a.log("start %s\n", updateCommand) + cfg, err := LoadConfig(currentDir) if err != nil { return fmt.Errorf("failed to load config: %w", err) } + a.log("config %+v\n", cfg) if err := cfg.Update(); err != nil { 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 { + a.getFlags(c) + a.log("start %s\n", cleanCommand) + cfg, err := LoadConfig(currentDir) if err != nil { return fmt.Errorf("failed to load config: %w", err) } + a.log("config %+v\n", cfg) if err := cfg.Clean(); err != nil { return fmt.Errorf("failed to clean config: %w", err) @@ -116,3 +151,13 @@ func (a *action) RunClean(c *cli.Context) error { 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...) + } +}