diff --git a/internal/status/checksum.go b/internal/status/checksum.go index 44331047..6c08c58d 100644 --- a/internal/status/checksum.go +++ b/internal/status/checksum.go @@ -14,10 +14,11 @@ import ( // Checksum validades if a task is up to date by calculating its source // files checksum type Checksum struct { - Dir string - Task string - Sources []string - Dry bool + Dir string + Task string + Sources []string + Generates []string + Dry bool } // IsUpToDate implements the Checker interface @@ -32,6 +33,16 @@ func (c *Checksum) IsUpToDate() (bool, error) { return false, err } + generates, err := glob(c.Dir, c.Generates) + if err != nil || len(generates) == 0 { + return false, err + } + for _, generate := range generates { + if _, err := os.Stat(generate); err != nil { + return false, nil + } + } + newMd5, err := c.checksum(sources...) if err != nil { return false, nil diff --git a/status.go b/status.go index 7ebb5f84..51d0e4cb 100644 --- a/status.go +++ b/status.go @@ -58,10 +58,11 @@ func (e *Executor) getStatusChecker(t *taskfile.Task) (status.Checker, error) { }, nil case "checksum": return &status.Checksum{ - Dir: t.Dir, - Task: t.Task, - Sources: t.Sources, - Dry: e.Dry, + Dir: t.Dir, + Task: t.Task, + Sources: t.Sources, + Generates: t.Generates, + Dry: e.Dry, }, nil case "none": return status.None{}, nil