1
0
mirror of https://github.com/go-task/task.git synced 2025-08-10 22:42:19 +02:00

Allow setting a variable

This commit is contained in:
Sascha Andres
2017-03-02 20:19:25 +01:00
parent b9820c5c7d
commit eb783d04b8

35
task.go
View File

@@ -44,6 +44,7 @@ type Task struct {
Generates []string Generates []string
Dir string Dir string
Variables map[string]string Variables map[string]string
Set string
} }
type taskNotFoundError struct { type taskNotFoundError struct {
@@ -101,22 +102,31 @@ func RunTask(name string) error {
log.Printf(`Task "%s" is up to date`, name) log.Printf(`Task "%s" is up to date`, name)
return nil return nil
} }
vars, err := t.handleVariables() vars, err := t.handleVariables()
if err != nil { if err != nil {
return &taskRunError{name, err} return &taskRunError{name, err}
} }
for _, d := range t.Deps { for _, d := range t.Deps {
if err := RunTask(ReplaceVariables(d, vars)); err != nil { if err := RunTask(ReplaceVariables(d, vars)); err != nil {
return err return err
} }
} }
vars, err = t.handleVariables() // read in a second time, as a dependency could have set a new env variable
for _, c := range t.Cmds { if err != nil {
if err := runCommand(ReplaceVariables(c, vars), ReplaceVariables(t.Dir, vars)); err != nil {
return &taskRunError{name, err} return &taskRunError{name, err}
} }
for _, c := range t.Cmds {
var (
output string
err error
)
if output, err = runCommand(ReplaceVariables(c, vars), ReplaceVariables(t.Dir, vars)); err != nil {
return &taskRunError{name, err}
}
fmt.Println(output)
if t.Set != "" {
os.Setenv(t.Set, output)
}
} }
return nil return nil
} }
@@ -139,8 +149,12 @@ func isTaskUpToDate(t *Task) bool {
return generatesMinTime.After(sourcesMaxTime) return generatesMinTime.After(sourcesMaxTime)
} }
func runCommand(c, path string) error { func runCommand(c, path string) (string, error) {
var cmd *exec.Cmd var (
cmd *exec.Cmd
b []byte
err error
)
if ShExists { if ShExists {
cmd = exec.Command(ShPath, "-c", c) cmd = exec.Command(ShPath, "-c", c)
} else { } else {
@@ -149,12 +163,11 @@ func runCommand(c, path string) error {
if path != "" { if path != "" {
cmd.Dir = path cmd.Dir = path
} }
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr cmd.Stderr = os.Stderr
if err := cmd.Run(); err != nil { if b, err = cmd.Output(); err != nil {
return err return "", err
} }
return nil return string(b), nil
} }
func readTaskfile() (tasks map[string]*Task, err error) { func readTaskfile() (tasks map[string]*Task, err error) {