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:
33
task.go
33
task.go
@@ -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
|
||||||
|
if err != nil {
|
||||||
|
return &taskRunError{name, err}
|
||||||
|
}
|
||||||
for _, c := range t.Cmds {
|
for _, c := range t.Cmds {
|
||||||
if err := runCommand(ReplaceVariables(c, vars), ReplaceVariables(t.Dir, vars)); err != nil {
|
var (
|
||||||
|
output string
|
||||||
|
err error
|
||||||
|
)
|
||||||
|
if output, err = runCommand(ReplaceVariables(c, vars), ReplaceVariables(t.Dir, vars)); err != nil {
|
||||||
return &taskRunError{name, err}
|
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) {
|
||||||
|
Reference in New Issue
Block a user