1
0
mirror of https://github.com/go-task/task.git synced 2025-02-03 13:22:11 +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"
"os"
"strings"
"sync"
"github.com/go-task/task/execext"
"github.com/spf13/pflag"
"golang.org/x/sync/errgroup"
)
var (
@ -113,41 +113,28 @@ func (t *Task) runDeps() error {
return err
}
var (
wg sync.WaitGroup
errChan = make(chan error)
doneChan = make(chan struct{})
)
var g errgroup.Group
for _, d := range t.Deps {
wg.Add(1)
go func(dep string) {
defer wg.Done()
dep := d
g.Go(func() error {
dep, err := ReplaceVariables(dep, vars)
if err != nil {
errChan <- err
return
return err
}
if err := RunTask(dep); err != nil {
errChan <- err
if err = RunTask(dep); err != nil {
return err
}
}(d)
return nil
})
}
go func() {
wg.Wait()
doneChan <- struct{}{}
}()
select {
case err := <-errChan:
if err = g.Wait(); err != nil {
return err
case <-doneChan:
return nil
}
return nil
}
func (t *Task) isUpToDate() bool {