diff --git a/cmd.go b/cmd.go index e8dad20..8099762 100644 --- a/cmd.go +++ b/cmd.go @@ -12,9 +12,9 @@ import ( type tool struct { dir bool status bool - cmd string name string err string + cmd []string options []string } @@ -24,7 +24,7 @@ type Cmds struct { Fmt Cmd `yaml:"fmt,omitempty" json:"fmt,omitempty"` Test Cmd `yaml:"test,omitempty" json:"test,omitempty"` Generate Cmd `yaml:"generate,omitempty" json:"generate,omitempty"` - Install Cmd `yaml:"install" json:"install"` + Install Cmd `yaml:"install,omitempty" json:"install,omitempty"` Build Cmd `yaml:"build,omitempty" json:"build,omitempty"` Run bool `yaml:"run,omitempty" json:"run,omitempty"` } @@ -32,8 +32,8 @@ type Cmds struct { // Cmd type Cmd struct { Status bool `yaml:"status,omitempty" json:"status,omitempty"` + Method string `yaml:"method,omitempty" json:"method,omitempty"` Args []string `yaml:"args,omitempty" json:"args,omitempty"` - Method []string `yaml:"method,omitempty" json:"method,omitempty"` method []string name, startTxt, endTxt string } @@ -118,35 +118,35 @@ func (r *realize) run(p *cli.Context) error { } r.Schema[k].tools = append(r.Schema[k].tools, tool{ status: elm.Cmds.Fmt.Status, - cmd: "gofmt", + cmd: replace([]string{"gofmt"}, r.Schema[k].Cmds.Fmt.Method), options: split([]string{}, elm.Cmds.Fmt.Args), - name: "Go Fmt", + name: "Fmt", }) } if elm.Cmds.Generate.Status { r.Schema[k].tools = append(r.Schema[k].tools, tool{ status: elm.Cmds.Generate.Status, - cmd: "go", - options: split([]string{"generate"}, elm.Cmds.Generate.Args), - name: "Go Generate", + cmd: replace([]string{"go", "generate"}, r.Schema[k].Cmds.Generate.Method), + options: split([]string{}, elm.Cmds.Generate.Args), + name: "Generate", dir: true, }) } if elm.Cmds.Test.Status { r.Schema[k].tools = append(r.Schema[k].tools, tool{ status: elm.Cmds.Test.Status, - cmd: "go", - options: split([]string{"test"}, elm.Cmds.Test.Args), - name: "Go Test", + cmd: replace([]string{"go", "test"}, r.Schema[k].Cmds.Test.Method), + options: split([]string{}, elm.Cmds.Test.Args), + name: "Test", dir: true, }) } if elm.Cmds.Vet.Status { r.Schema[k].tools = append(r.Schema[k].tools, tool{ status: elm.Cmds.Vet.Status, - cmd: "go", - options: split([]string{"vet"}, elm.Cmds.Vet.Args), - name: "Go Vet", + cmd: replace([]string{"go", "vet"}, r.Schema[k].Cmds.Vet.Method), + options: split([]string{}, elm.Cmds.Vet.Args), + name: "Vet", dir: true, }) } @@ -154,16 +154,16 @@ func (r *realize) run(p *cli.Context) error { r.Schema[k].Cmds.Install = Cmd{ Status: elm.Cmds.Install.Status, Args: append([]string{}, elm.Cmds.Install.Args...), - method: []string{"go", "install"}, - name: "Go Install", + method: replace([]string{"go", "install"}, r.Schema[k].Cmds.Install.Method), + name: "Install", startTxt: "Installing...", endTxt: "Installed", } r.Schema[k].Cmds.Build = Cmd{ Status: elm.Cmds.Build.Status, Args: append([]string{}, elm.Cmds.Build.Args...), - method: []string{"go", "build"}, - name: "Go Build", + method: replace([]string{"go", "build"}, r.Schema[k].Cmds.Build.Method), + name: "Build", startTxt: "Bulding...", endTxt: "Built", } diff --git a/exec.go b/exec.go index 1794aba..eadaab4 100644 --- a/exec.go +++ b/exec.go @@ -193,7 +193,8 @@ func (p *Project) goTool(wg *sync.WaitGroup, stop <-chan bool, result chan<- too if s := ext(path); s == "" || s == "go" { var out, stderr bytes.Buffer done := make(chan error) - cmd := exec.Command(tool.cmd, tool.options...) + tool.cmd = append(tool.cmd, tool.options...) + cmd := exec.Command(tool.cmd[0], tool.cmd[1:]...) cmd.Dir = path cmd.Stdout = &out cmd.Stderr = &stderr diff --git a/utils.go b/utils.go index 03f831a..4025f79 100644 --- a/utils.go +++ b/utils.go @@ -62,6 +62,7 @@ func duplicates(value Project, arr []Project) (Project, error) { return Project{}, nil } +// Get file extensions func ext(path string) string { var ext string for i := len(path) - 1; i >= 0 && !os.IsPathSeparator(path[i]); i-- { @@ -74,3 +75,11 @@ func ext(path string) string { } return "" } + +// Replace if isn't empty and create a new array +func replace(a []string, b string) []string { + if len(b) > 0 { + return strings.Fields(b) + } + return a +} diff --git a/watcher.go b/watcher.go index b17c49e..305f0a3 100644 --- a/watcher.go +++ b/watcher.go @@ -214,9 +214,6 @@ func (p *Project) compile(stop <-chan bool, cmd Cmd) error { channel := make(chan Result) go func() { log.Println(p.pname(p.Name, 1), ":", cmd.startTxt) - if len(cmd.Method) > 0 { - cmd.method = cmd.Method - } stream, err := p.goCompile(stop, cmd.method, cmd.Args) if stream != "killed" { channel <- Result{stream, err}