1
0
mirror of https://github.com/go-task/task.git synced 2025-06-23 00:38:19 +02:00

DO nor re-run up-to-date tasks, based on ModTime and given patterns

This commit is contained in:
Andrey Nering
2017-02-27 16:44:08 -03:00
parent 7cab3997c1
commit 0e1aaabf11
2 changed files with 77 additions and 1 deletions

25
task.go
View File

@ -30,7 +30,7 @@ func init() {
type Task struct {
Cmds []string
Deps []string
Source string
Sources string
Generates string
}
@ -84,6 +84,11 @@ func RunTask(name string) error {
return &TaskNotFoundError{name}
}
if isTaskUpToDate(t) {
log.Printf(`Task "%s" is up to date`, name)
return nil
}
for _, d := range t.Deps {
if err := RunTask(d); err != nil {
return err
@ -98,6 +103,24 @@ func RunTask(name string) error {
return nil
}
func isTaskUpToDate(t *Task) bool {
if t.Sources == "" || t.Generates == "" {
return false
}
sourcesMaxTime, err := maxTime(t.Sources)
if err != nil || sourcesMaxTime.IsZero() {
return false
}
generatesMinTime, err := minTime(t.Generates)
if err != nil || generatesMinTime.IsZero() {
return false
}
return generatesMinTime.After(sourcesMaxTime)
}
func runCommand(c string) error {
var cmd *exec.Cmd
if ShExists {