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:
20
status.go
20
status.go
@@ -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
20
task.go
@@ -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
|
||||||
}
|
}
|
||||||
|
@@ -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))
|
||||||
|
Reference in New Issue
Block a user