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

allow custom Stdin, Stdout and Stderr while running as a lib

This commit is contained in:
Andrey Nering
2017-07-01 15:05:51 -03:00
parent 03fd5c84ec
commit 9ba44f3e6e
6 changed files with 46 additions and 17 deletions

26
task.go
View File

@@ -4,7 +4,7 @@ import (
"bytes"
"context"
"fmt"
"log"
"io"
"os"
"path/filepath"
"strings"
@@ -26,6 +26,10 @@ type Executor struct {
Force bool
Watch bool
Stdin io.Reader
Stdout io.Writer
Stderr io.Writer
watchingFiles map[string]struct{}
}
@@ -52,6 +56,16 @@ func (e *Executor) Run(args ...string) error {
return ErrCyclicDependencyDetected
}
if e.Stdin == nil {
e.Stdin = os.Stdin
}
if e.Stdout == nil {
e.Stdout = os.Stdout
}
if e.Stderr == nil {
e.Stderr = os.Stderr
}
// check if given tasks exist
for _, a := range args {
if _, ok := e.Tasks[a]; !ok {
@@ -93,7 +107,7 @@ func (e *Executor) RunTask(ctx context.Context, name string) error {
return err
}
if upToDate {
log.Printf(`task: Task "%s" is up to date`, name)
e.printfln(`task: Task "%s" is up to date`, name)
return nil
}
}
@@ -231,13 +245,13 @@ func (e *Executor) runCommand(ctx context.Context, task string, i int) error {
Command: c,
Dir: dir,
Env: envs,
Stdin: os.Stdin,
Stderr: os.Stderr,
Stdin: e.Stdin,
Stderr: e.Stderr,
}
if t.Set == "" {
log.Println(c)
opts.Stdout = os.Stdout
e.println(c)
opts.Stdout = e.Stdout
if err = execext.RunCommand(opts); err != nil {
return err
}