1
0
mirror of https://github.com/go-task/task.git synced 2025-08-10 22:42:19 +02:00

func isUpToDate should be bound to Task struct

This commit is contained in:
Andrey Nering
2017-07-30 19:45:01 -03:00
parent 70ef9fbcfe
commit f54dde4f78
3 changed files with 19 additions and 26 deletions

View File

@@ -10,20 +10,20 @@ import (
"github.com/mattn/go-zglob" "github.com/mattn/go-zglob"
) )
func (e *Executor) isTaskUpToDate(ctx context.Context, t *Task) (bool, error) { func (t *Task) isUpToDate(ctx context.Context) (bool, error) {
if len(t.Status) > 0 { if len(t.Status) > 0 {
return e.isUpToDateStatus(ctx, t) return t.isUpToDateStatus(ctx)
} }
return e.isUpToDateTimestamp(ctx, t) return t.isUpToDateTimestamp(ctx)
} }
func (e *Executor) isUpToDateStatus(ctx context.Context, t *Task) (bool, error) { func (t *Task) isUpToDateStatus(ctx context.Context) (bool, error) {
for _, s := range t.Status { for _, s := range t.Status {
err := execext.RunCommand(&execext.RunCommandOptions{ err := execext.RunCommand(&execext.RunCommandOptions{
Context: ctx, Context: ctx,
Command: s, Command: s,
Dir: e.getTaskDir(t), Dir: t.Dir,
Env: e.getEnviron(t), Env: t.getEnviron(),
}) })
if err != nil { if err != nil {
return false, nil return false, nil
@@ -32,19 +32,17 @@ func (e *Executor) isUpToDateStatus(ctx context.Context, t *Task) (bool, error)
return true, nil return true, nil
} }
func (e *Executor) isUpToDateTimestamp(ctx context.Context, t *Task) (bool, error) { func (t *Task) isUpToDateTimestamp(ctx context.Context) (bool, error) {
if len(t.Sources) == 0 || len(t.Generates) == 0 { if len(t.Sources) == 0 || len(t.Generates) == 0 {
return false, nil return false, nil
} }
dir := e.getTaskDir(t) sourcesMaxTime, err := getPatternsMaxTime(t.Dir, t.Sources)
sourcesMaxTime, err := getPatternsMaxTime(dir, t.Sources)
if err != nil || sourcesMaxTime.IsZero() { if err != nil || sourcesMaxTime.IsZero() {
return false, nil return false, nil
} }
generatesMinTime, err := getPatternsMinTime(dir, t.Generates) generatesMinTime, err := getPatternsMinTime(t.Dir, t.Generates)
if err != nil || generatesMinTime.IsZero() { if err != nil || generatesMinTime.IsZero() {
return false, nil return false, nil
} }

20
task.go
View File

@@ -6,7 +6,6 @@ import (
"fmt" "fmt"
"io" "io"
"os" "os"
"path/filepath"
"strings" "strings"
"sync" "sync"
"sync/atomic" "sync/atomic"
@@ -124,7 +123,7 @@ func (e *Executor) RunTask(ctx context.Context, call Call) error {
return err return err
} }
t, err := origTask.CompiledTask(vars) t, err := origTask.CompiledTask(e.Dir, vars)
if err != nil { if err != nil {
return err return err
} }
@@ -140,13 +139,13 @@ func (e *Executor) RunTask(ctx context.Context, call Call) error {
if err != nil { if err != nil {
return err return err
} }
t, err = origTask.CompiledTask(vars) t, err = origTask.CompiledTask(e.Dir, vars)
if err != nil { if err != nil {
return err return err
} }
if !e.Force { if !e.Force {
upToDate, err := e.isTaskUpToDate(ctx, t) upToDate, err := t.isUpToDate(ctx)
if err != nil { if err != nil {
return err return err
} }
@@ -188,8 +187,8 @@ func (e *Executor) runCommand(ctx context.Context, t *Task, call Call, i int) er
opts := &execext.RunCommandOptions{ opts := &execext.RunCommandOptions{
Context: ctx, Context: ctx,
Command: cmd.Cmd, Command: cmd.Cmd,
Dir: e.getTaskDir(t), Dir: t.Dir,
Env: e.getEnviron(t), Env: t.getEnviron(),
Stdin: e.Stdin, Stdin: e.Stdin,
Stderr: e.Stderr, Stderr: e.Stderr,
} }
@@ -210,14 +209,7 @@ func (e *Executor) runCommand(ctx context.Context, t *Task, call Call, i int) er
return execext.RunCommand(opts) return execext.RunCommand(opts)
} }
func (e *Executor) getTaskDir(t *Task) string { func (t *Task) getEnviron() []string {
if filepath.IsAbs(t.Dir) {
return t.Dir
}
return filepath.Join(e.Dir, t.Dir)
}
func (e *Executor) getEnviron(t *Task) []string {
if t.Env == nil { if t.Env == nil {
return nil return nil
} }

View File

@@ -228,7 +228,7 @@ func (e *Executor) handleDynamicVariableContent(v Var) (string, error) {
// CompiledTask returns a copy of a task, but replacing // CompiledTask returns a copy of a task, but replacing
// variables in almost all properties using the Go template package // variables in almost all properties using the Go template package
func (t *Task) CompiledTask(vars Vars) (*Task, error) { func (t *Task) CompiledTask(dir string, vars Vars) (*Task, error) {
r := varReplacer{vars: vars} r := varReplacer{vars: vars}
new := Task{ new := Task{
@@ -242,6 +242,9 @@ func (t *Task) CompiledTask(vars Vars) (*Task, error) {
Env: r.replaceVars(t.Env), Env: r.replaceVars(t.Env),
Silent: t.Silent, Silent: t.Silent,
} }
if dir != "" && !filepath.IsAbs(new.Dir) {
new.Dir = filepath.Join(dir, new.Dir)
}
if len(t.Cmds) > 0 { if len(t.Cmds) > 0 {
new.Cmds = make([]*Cmd, len(t.Cmds)) new.Cmds = make([]*Cmd, len(t.Cmds))