From 49d4901c76cc507dc1359447755d413dc625774c Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Mon, 27 Feb 2017 10:07:54 -0300 Subject: [PATCH] Support Windows If "sh" is available (Git bash) it is used. Otherwise "cmd" is used. --- task.go | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) diff --git a/task.go b/task.go index 1712d76f..2349ed93 100644 --- a/task.go +++ b/task.go @@ -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 +}