1
0
mirror of https://github.com/go-task/task.git synced 2025-02-09 13:47:06 +02:00

Pass context as an argument

This commit is contained in:
Andrey Nering 2019-02-09 10:16:13 -02:00
parent 27b35157cd
commit 713ecd35f6
4 changed files with 28 additions and 34 deletions

View File

@ -89,11 +89,6 @@ func main() {
return return
} }
ctx := context.Background()
if !watch {
ctx = getSignalContext()
}
e := task.Executor{ e := task.Executor{
Force: force, Force: force,
Watch: watch, Watch: watch,
@ -102,8 +97,6 @@ func main() {
Dir: dir, Dir: dir,
Dry: dry, Dry: dry,
Context: ctx,
Stdin: os.Stdin, Stdin: os.Stdin,
Stdout: os.Stdout, Stdout: os.Stdout,
Stderr: os.Stderr, Stderr: os.Stderr,
@ -130,14 +123,19 @@ func main() {
log.Fatal(err) log.Fatal(err)
} }
ctx := context.Background()
if !watch {
ctx = getSignalContext()
}
if status { if status {
if err = e.Status(calls...); err != nil { if err = e.Status(ctx, calls...); err != nil {
log.Fatal(err) log.Fatal(err)
} }
return return
} }
if err := e.Run(calls...); err != nil { if err := e.Run(ctx, calls...); err != nil {
log.Fatal(err) log.Fatal(err)
} }
} }

View File

@ -10,13 +10,13 @@ import (
) )
// Status returns an error if any the of given tasks is not up-to-date // Status returns an error if any the of given tasks is not up-to-date
func (e *Executor) Status(calls ...taskfile.Call) error { func (e *Executor) Status(ctx context.Context, calls ...taskfile.Call) error {
for _, call := range calls { for _, call := range calls {
t, err := e.CompiledTask(call) t, err := e.CompiledTask(call)
if err != nil { if err != nil {
return err return err
} }
isUpToDate, err := isTaskUpToDate(e.Context, t) isUpToDate, err := isTaskUpToDate(ctx, t)
if err != nil { if err != nil {
return err return err
} }

View File

@ -37,8 +37,6 @@ type Executor struct {
Silent bool Silent bool
Dry bool Dry bool
Context context.Context
Stdin io.Reader Stdin io.Reader
Stdout io.Writer Stdout io.Writer
Stderr io.Writer Stderr io.Writer
@ -54,7 +52,7 @@ type Executor struct {
} }
// Run runs Task // Run runs Task
func (e *Executor) Run(calls ...taskfile.Call) error { func (e *Executor) Run(ctx context.Context, calls ...taskfile.Call) error {
// check if given tasks exist // check if given tasks exist
for _, c := range calls { for _, c := range calls {
if _, ok := e.Taskfile.Tasks[c.Task]; !ok { if _, ok := e.Taskfile.Tasks[c.Task]; !ok {
@ -69,7 +67,7 @@ func (e *Executor) Run(calls ...taskfile.Call) error {
} }
for _, c := range calls { for _, c := range calls {
if err := e.RunTask(e.Context, c); err != nil { if err := e.RunTask(ctx, c); err != nil {
return err return err
} }
} }
@ -93,9 +91,6 @@ func (e *Executor) Setup() error {
return fmt.Errorf(`task: could not parse taskfile version "%s": %v`, e.Taskfile.Version, err) return fmt.Errorf(`task: could not parse taskfile version "%s": %v`, e.Taskfile.Version, err)
} }
if e.Context == nil {
e.Context = context.Background()
}
if e.Stdin == nil { if e.Stdin == nil {
e.Stdin = os.Stdin e.Stdin = os.Stdin
} }

View File

@ -2,6 +2,7 @@ package task_test
import ( import (
"bytes" "bytes"
"context"
"fmt" "fmt"
"io/ioutil" "io/ioutil"
"os" "os"
@ -40,7 +41,7 @@ func (fct fileContentTest) Run(t *testing.T) {
Stderr: ioutil.Discard, Stderr: ioutil.Discard,
} }
assert.NoError(t, e.Setup(), "e.Setup()") assert.NoError(t, e.Setup(), "e.Setup()")
assert.NoError(t, e.Run(taskfile.Call{Task: fct.Target}), "e.Run(target)") assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: fct.Target}), "e.Run(target)")
for name, expectContent := range fct.Files { for name, expectContent := range fct.Files {
t.Run(fct.name(name), func(t *testing.T) { t.Run(fct.name(name), func(t *testing.T) {
@ -178,7 +179,7 @@ func TestVarsInvalidTmpl(t *testing.T) {
Stderr: ioutil.Discard, Stderr: ioutil.Discard,
} }
assert.NoError(t, e.Setup(), "e.Setup()") assert.NoError(t, e.Setup(), "e.Setup()")
assert.EqualError(t, e.Run(taskfile.Call{Task: target}), expectError, "e.Run(target)") assert.EqualError(t, e.Run(context.Background(), taskfile.Call{Task: target}), expectError, "e.Run(target)")
} }
func TestParams(t *testing.T) { func TestParams(t *testing.T) {
@ -230,7 +231,7 @@ func TestDeps(t *testing.T) {
Stderr: ioutil.Discard, Stderr: ioutil.Discard,
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "default"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "default"}))
for _, f := range files { for _, f := range files {
f = filepath.Join(dir, f) f = filepath.Join(dir, f)
@ -258,14 +259,14 @@ func TestStatus(t *testing.T) {
Silent: true, Silent: true,
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "gen-foo"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "gen-foo"}))
if _, err := os.Stat(file); err != nil { if _, err := os.Stat(file); err != nil {
t.Errorf("File should exists: %v", err) t.Errorf("File should exists: %v", err)
} }
e.Silent = false e.Silent = false
assert.NoError(t, e.Run(taskfile.Call{Task: "gen-foo"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "gen-foo"}))
if buff.String() != `task: Task "gen-foo" is up to date`+"\n" { if buff.String() != `task: Task "gen-foo" is up to date`+"\n" {
t.Errorf("Wrong output message: %s", buff.String()) t.Errorf("Wrong output message: %s", buff.String())
@ -304,7 +305,7 @@ func TestGenerates(t *testing.T) {
fmt.Sprintf("task: Task \"%s\" is up to date\n", theTask) fmt.Sprintf("task: Task \"%s\" is up to date\n", theTask)
// Run task for the first time. // Run task for the first time.
assert.NoError(t, e.Run(taskfile.Call{Task: theTask})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: theTask}))
if _, err := os.Stat(srcFile); err != nil { if _, err := os.Stat(srcFile); err != nil {
t.Errorf("File should exists: %v", err) t.Errorf("File should exists: %v", err)
@ -319,7 +320,7 @@ func TestGenerates(t *testing.T) {
buff.Reset() buff.Reset()
// Re-run task to ensure it's now found to be up-to-date. // Re-run task to ensure it's now found to be up-to-date.
assert.NoError(t, e.Run(taskfile.Call{Task: theTask})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: theTask}))
if buff.String() != upToDate { if buff.String() != upToDate {
t.Errorf("Wrong output message: %s", buff.String()) t.Errorf("Wrong output message: %s", buff.String())
} }
@ -350,14 +351,14 @@ func TestStatusChecksum(t *testing.T) {
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "build"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "build"}))
for _, f := range files { for _, f := range files {
_, err := os.Stat(filepath.Join(dir, f)) _, err := os.Stat(filepath.Join(dir, f))
assert.NoError(t, err) assert.NoError(t, err)
} }
buff.Reset() buff.Reset()
assert.NoError(t, e.Run(taskfile.Call{Task: "build"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "build"}))
assert.Equal(t, `task: Task "build" is up to date`+"\n", buff.String()) assert.Equal(t, `task: Task "build" is up to date`+"\n", buff.String())
} }
@ -388,7 +389,7 @@ func TestCyclicDep(t *testing.T) {
Stderr: ioutil.Discard, Stderr: ioutil.Discard,
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.IsType(t, &task.MaximumTaskCallExceededError{}, e.Run(taskfile.Call{Task: "task-1"})) assert.IsType(t, &task.MaximumTaskCallExceededError{}, e.Run(context.Background(), taskfile.Call{Task: "task-1"}))
} }
func TestTaskVersion(t *testing.T) { func TestTaskVersion(t *testing.T) {
@ -424,10 +425,10 @@ func TestTaskIgnoreErrors(t *testing.T) {
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "task-should-pass"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "task-should-pass"}))
assert.Error(t, e.Run(taskfile.Call{Task: "task-should-fail"})) assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "task-should-fail"}))
assert.NoError(t, e.Run(taskfile.Call{Task: "cmd-should-pass"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "cmd-should-pass"}))
assert.Error(t, e.Run(taskfile.Call{Task: "cmd-should-fail"})) assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "cmd-should-fail"}))
} }
func TestExpand(t *testing.T) { func TestExpand(t *testing.T) {
@ -445,7 +446,7 @@ func TestExpand(t *testing.T) {
Stderr: &buff, Stderr: &buff,
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "pwd"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "pwd"}))
assert.Equal(t, home, strings.TrimSpace(buff.String())) assert.Equal(t, home, strings.TrimSpace(buff.String()))
} }
@ -464,7 +465,7 @@ func TestDry(t *testing.T) {
Dry: true, Dry: true,
} }
assert.NoError(t, e.Setup()) assert.NoError(t, e.Setup())
assert.NoError(t, e.Run(taskfile.Call{Task: "build"})) assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "build"}))
assert.Equal(t, "touch file.txt", strings.TrimSpace(buff.String())) assert.Equal(t, "touch file.txt", strings.TrimSpace(buff.String()))
if _, err := os.Stat(file); err == nil { if _, err := os.Stat(file); err == nil {