diff --git a/cmd/task/task.go b/cmd/task/task.go index bd2f196b..694a0a5c 100644 --- a/cmd/task/task.go +++ b/cmd/task/task.go @@ -89,11 +89,6 @@ func main() { return } - ctx := context.Background() - if !watch { - ctx = getSignalContext() - } - e := task.Executor{ Force: force, Watch: watch, @@ -102,8 +97,6 @@ func main() { Dir: dir, Dry: dry, - Context: ctx, - Stdin: os.Stdin, Stdout: os.Stdout, Stderr: os.Stderr, @@ -130,14 +123,19 @@ func main() { log.Fatal(err) } + ctx := context.Background() + if !watch { + ctx = getSignalContext() + } + if status { - if err = e.Status(calls...); err != nil { + if err = e.Status(ctx, calls...); err != nil { log.Fatal(err) } return } - if err := e.Run(calls...); err != nil { + if err := e.Run(ctx, calls...); err != nil { log.Fatal(err) } } diff --git a/status.go b/status.go index 5ba7cfda..9bee76a4 100644 --- a/status.go +++ b/status.go @@ -10,13 +10,13 @@ import ( ) // 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 { t, err := e.CompiledTask(call) if err != nil { return err } - isUpToDate, err := isTaskUpToDate(e.Context, t) + isUpToDate, err := isTaskUpToDate(ctx, t) if err != nil { return err } diff --git a/task.go b/task.go index 0a774185..7ea05731 100644 --- a/task.go +++ b/task.go @@ -37,8 +37,6 @@ type Executor struct { Silent bool Dry bool - Context context.Context - Stdin io.Reader Stdout io.Writer Stderr io.Writer @@ -54,7 +52,7 @@ type Executor struct { } // 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 for _, c := range calls { if _, ok := e.Taskfile.Tasks[c.Task]; !ok { @@ -69,7 +67,7 @@ func (e *Executor) Run(calls ...taskfile.Call) error { } for _, c := range calls { - if err := e.RunTask(e.Context, c); err != nil { + if err := e.RunTask(ctx, c); err != nil { 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) } - if e.Context == nil { - e.Context = context.Background() - } if e.Stdin == nil { e.Stdin = os.Stdin } diff --git a/task_test.go b/task_test.go index 76dcdb46..e2072865 100644 --- a/task_test.go +++ b/task_test.go @@ -2,6 +2,7 @@ package task_test import ( "bytes" + "context" "fmt" "io/ioutil" "os" @@ -40,7 +41,7 @@ func (fct fileContentTest) Run(t *testing.T) { Stderr: ioutil.Discard, } 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 { t.Run(fct.name(name), func(t *testing.T) { @@ -178,7 +179,7 @@ func TestVarsInvalidTmpl(t *testing.T) { Stderr: ioutil.Discard, } 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) { @@ -230,7 +231,7 @@ func TestDeps(t *testing.T) { Stderr: ioutil.Discard, } 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 { f = filepath.Join(dir, f) @@ -258,14 +259,14 @@ func TestStatus(t *testing.T) { Silent: true, } 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 { t.Errorf("File should exists: %v", err) } 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" { 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) // 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 { t.Errorf("File should exists: %v", err) @@ -319,7 +320,7 @@ func TestGenerates(t *testing.T) { buff.Reset() // 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 { 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.Run(taskfile.Call{Task: "build"})) + assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "build"})) for _, f := range files { _, err := os.Stat(filepath.Join(dir, f)) assert.NoError(t, err) } 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()) } @@ -388,7 +389,7 @@ func TestCyclicDep(t *testing.T) { Stderr: ioutil.Discard, } 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) { @@ -424,10 +425,10 @@ func TestTaskIgnoreErrors(t *testing.T) { } assert.NoError(t, e.Setup()) - assert.NoError(t, e.Run(taskfile.Call{Task: "task-should-pass"})) - assert.Error(t, e.Run(taskfile.Call{Task: "task-should-fail"})) - assert.NoError(t, e.Run(taskfile.Call{Task: "cmd-should-pass"})) - assert.Error(t, e.Run(taskfile.Call{Task: "cmd-should-fail"})) + assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "task-should-pass"})) + assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "task-should-fail"})) + assert.NoError(t, e.Run(context.Background(), taskfile.Call{Task: "cmd-should-pass"})) + assert.Error(t, e.Run(context.Background(), taskfile.Call{Task: "cmd-should-fail"})) } func TestExpand(t *testing.T) { @@ -445,7 +446,7 @@ func TestExpand(t *testing.T) { Stderr: &buff, } 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())) } @@ -464,7 +465,7 @@ func TestDry(t *testing.T) { Dry: true, } 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())) if _, err := os.Stat(file); err == nil {