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
parent
3ac06c6082
commit
1b1e813024
59
main.go
59
main.go
|
@ -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...)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue