1
0
mirror of https://github.com/go-task/task.git synced 2025-04-23 12:18:57 +02:00

Merge branch 'master' into v3

This commit is contained in:
Andrey Nering 2019-08-25 18:05:40 -03:00
commit dc8fb79759
6 changed files with 84 additions and 50 deletions

View File

@ -14,9 +14,8 @@ build:
env: env:
- CGO_ENABLED=0 - CGO_ENABLED=0
archive: archives:
name_template: "{{.Binary}}_{{.Os}}_{{.Arch}}" - name_template: "{{.Binary}}_{{.Os}}_{{.Arch}}"
format_overrides: format_overrides:
- goos: windows - goos: windows
format: zip format: zip
@ -30,8 +29,8 @@ snapshot:
checksum: checksum:
name_template: "task_checksums.txt" name_template: "task_checksums.txt"
nfpm: nfpms:
vendor: Task - vendor: Task
homepage: https://github.com/go-task/task homepage: https://github.com/go-task/task
maintainer: Andrey Nering <andrey.nering@gmail.com> maintainer: Andrey Nering <andrey.nering@gmail.com>
description: Simple task runner written in Go description: Simple task runner written in Go

View File

@ -14,6 +14,8 @@
- Fixed panic bug when assigning a global variable - Fixed panic bug when assigning a global variable
([#229](https://github.com/go-task/task/issues/229), [#243](https://github.com/go-task/task/issues/234)). ([#229](https://github.com/go-task/task/issues/229), [#243](https://github.com/go-task/task/issues/234)).
- A task with `method: checksum` will now re-run if generated files are deleted
([#228](https://github.com/go-task/task/pull/228), [#238](https://github.com/go-task/task/issues/238)).
## v2.6.0 - 2019-07-21 ## v2.6.0 - 2019-07-21

View File

@ -17,6 +17,7 @@ type Checksum struct {
Dir string Dir string
Task string Task string
Sources []string Sources []string
Generates []string
Dry bool Dry bool
} }
@ -27,7 +28,7 @@ func (c *Checksum) IsUpToDate() (bool, error) {
data, _ := ioutil.ReadFile(checksumFile) data, _ := ioutil.ReadFile(checksumFile)
oldMd5 := strings.TrimSpace(string(data)) oldMd5 := strings.TrimSpace(string(data))
sources, err := glob(c.Dir, c.Sources) sources, err := globs(c.Dir, c.Sources)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -43,6 +44,23 @@ func (c *Checksum) IsUpToDate() (bool, error) {
return false, err return false, err
} }
} }
if len(c.Generates) > 0 {
// For each specified 'generates' field, check whether the files actually exist
for _, g := range c.Generates {
generates, err := glob(c.Dir, g)
if os.IsNotExist(err) {
return false, nil
}
if err != nil {
return false, err
}
if len(generates) == 0 {
return false, nil
}
}
}
return oldMd5 == newMd5, nil return oldMd5 == newMd5, nil
} }
@ -50,21 +68,14 @@ func (c *Checksum) checksum(files ...string) (string, error) {
h := md5.New() h := md5.New()
for _, f := range files { for _, f := range files {
// also sum the filename, so checksum changes for renaming a file
if _, err := io.Copy(h, strings.NewReader(filepath.Base(f))); err != nil {
return "", err
}
f, err := os.Open(f) f, err := os.Open(f)
if err != nil { if err != nil {
return "", err return "", err
} }
info, err := f.Stat()
if err != nil {
return "", err
}
if info.IsDir() {
continue
}
// also sum the filename, so checksum changes for renaming a file
if _, err = io.Copy(h, strings.NewReader(info.Name())); err != nil {
return "", err
}
if _, err = io.Copy(h, f); err != nil { if _, err = io.Copy(h, f); err != nil {
return "", err return "", err
} }

View File

@ -1,6 +1,7 @@
package status package status
import ( import (
"os"
"path/filepath" "path/filepath"
"sort" "sort"
@ -9,21 +10,41 @@ import (
"github.com/mattn/go-zglob" "github.com/mattn/go-zglob"
) )
func glob(dir string, globs []string) (files []string, err error) { func globs(dir string, globs []string) ([]string, error) {
files := make([]string, 0)
for _, g := range globs { for _, g := range globs {
if !filepath.IsAbs(g) { f, err := glob(dir, g)
g = filepath.Join(dir, g)
}
g, err = execext.Expand(g)
if err != nil {
return nil, err
}
f, err := zglob.Glob(g)
if err != nil { if err != nil {
continue continue
} }
files = append(files, f...) files = append(files, f...)
} }
sort.Strings(files) sort.Strings(files)
return return files, nil
}
func glob(dir string, g string) ([]string, error) {
files := make([]string, 0)
if !filepath.IsAbs(g) {
g = filepath.Join(dir, g)
}
g, err := execext.Expand(g)
if err != nil {
return nil, err
}
fs, err := zglob.Glob(g)
if err != nil {
return nil, err
}
for _, f := range fs {
info, err := os.Stat(f)
if err != nil {
return nil, err
}
if info.IsDir() {
continue
}
files = append(files, f)
}
return files, nil
} }

View File

@ -19,11 +19,11 @@ func (t *Timestamp) IsUpToDate() (bool, error) {
return false, nil return false, nil
} }
sources, err := glob(t.Dir, t.Sources) sources, err := globs(t.Dir, t.Sources)
if err != nil { if err != nil {
return false, nil return false, nil
} }
generates, err := glob(t.Dir, t.Generates) generates, err := globs(t.Dir, t.Generates)
if err != nil { if err != nil {
return false, nil return false, nil
} }

View File

@ -62,6 +62,7 @@ func (e *Executor) getStatusChecker(t *taskfile.Task) (status.Checker, error) {
Dir: t.Dir, Dir: t.Dir,
Task: t.Task, Task: t.Task,
Sources: t.Sources, Sources: t.Sources,
Generates: t.Generates,
Dry: e.Dry, Dry: e.Dry,
}, nil }, nil
case "none": case "none":