1
0
mirror of https://github.com/go-task/task.git synced 2025-02-03 13:22:11 +02:00

Support Windows

If "sh" is available (Git bash) it is used. Otherwise "cmd" is used.
This commit is contained in:
Andrey Nering 2017-02-27 10:07:54 -03:00
parent a441fea849
commit 49d4901c76

31
task.go
View File

@ -15,10 +15,21 @@ import (
var (
CurrentDirectory, _ = osext.ExecutableFolder()
TaskFilePath = filepath.Join(CurrentDirectory, "Taskfile.yml")
ShExists bool
ShPath string
Tasks = make(map[string]*Task)
)
func init() {
var err error
ShPath, err = exec.LookPath("sh")
if err != nil {
return
}
ShExists = true
}
type Task struct {
Cmds []string
Deps []string
@ -81,12 +92,24 @@ func RunTask(name string) error {
}
for _, c := range t.Cmds {
cmd := exec.Command("/bin/sh", "-c", c)
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
if err := runCommand(c); err != nil {
return &TaskRunError{name, err}
}
}
return nil
}
func runCommand(c string) error {
var cmd *exec.Cmd
if ShExists {
cmd = exec.Command(ShPath, "-c", c)
} else {
cmd = exec.Command("cmd", "/C", c)
}
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil {
return err
}
return nil
}