1
0
mirror of https://github.com/go-task/task.git synced 2025-02-09 13:47:06 +02:00

Using golang.org/x/sync/errgroup to exec deps

This commit is contained in:
Andrey Nering 2017-04-12 20:39:52 -03:00
parent 822f7f83ee
commit 109f20f193

35
task.go
View File

@ -6,11 +6,11 @@ import (
"log" "log"
"os" "os"
"strings" "strings"
"sync"
"github.com/go-task/task/execext" "github.com/go-task/task/execext"
"github.com/spf13/pflag" "github.com/spf13/pflag"
"golang.org/x/sync/errgroup"
) )
var ( var (
@ -113,41 +113,28 @@ func (t *Task) runDeps() error {
return err return err
} }
var ( var g errgroup.Group
wg sync.WaitGroup
errChan = make(chan error)
doneChan = make(chan struct{})
)
for _, d := range t.Deps { for _, d := range t.Deps {
wg.Add(1) dep := d
go func(dep string) {
defer wg.Done()
g.Go(func() error {
dep, err := ReplaceVariables(dep, vars) dep, err := ReplaceVariables(dep, vars)
if err != nil { if err != nil {
errChan <- err return err
return
} }
if err := RunTask(dep); err != nil { if err = RunTask(dep); err != nil {
errChan <- err return err
} }
}(d) return nil
})
} }
go func() { if err = g.Wait(); err != nil {
wg.Wait()
doneChan <- struct{}{}
}()
select {
case err := <-errChan:
return err return err
case <-doneChan:
return nil
} }
return nil
} }
func (t *Task) isUpToDate() bool { func (t *Task) isUpToDate() bool {