1
0
mirror of https://github.com/go-task/task.git synced 2025-02-03 13:22:11 +02:00

Switch variable replacing with Go's template engine

This commit is contained in:
Andrey Nering 2017-03-05 16:49:44 -03:00
parent 6368c2fdb6
commit 91d5fa5fe6
2 changed files with 33 additions and 13 deletions

20
task.go
View File

@ -89,7 +89,11 @@ func RunTask(name string) error {
} }
for _, d := range t.Deps { for _, d := range t.Deps {
if err := RunTask(ReplaceVariables(d, vars)); err != nil { d, err = ReplaceVariables(d, vars)
if err != nil {
return err
}
if err = RunTask(d); err != nil {
return err return err
} }
} }
@ -130,11 +134,15 @@ func (t *Task) runCommand(i int) error {
if err != nil { if err != nil {
return err return err
} }
var ( c, err := ReplaceVariables(t.Cmds[i], vars)
c = ReplaceVariables(t.Cmds[i], vars) if err != nil {
dir = ReplaceVariables(t.Dir, vars) return err
cmd *exec.Cmd }
) dir, err := ReplaceVariables(t.Dir, vars)
if err != nil {
return err
}
var cmd *exec.Cmd
if ShExists { if ShExists {
cmd = exec.Command(ShPath, "-c", c) cmd = exec.Command(ShPath, "-c", c)
} else { } else {

View File

@ -1,11 +1,13 @@
package task package task
import ( import (
"bytes"
"encoding/json" "encoding/json"
"fmt"
"io/ioutil" "io/ioutil"
"os" "os"
"runtime"
"strings" "strings"
"text/template"
"github.com/BurntSushi/toml" "github.com/BurntSushi/toml"
"gopkg.in/yaml.v2" "gopkg.in/yaml.v2"
@ -34,13 +36,23 @@ func (t Task) handleVariables() (map[string]string, error) {
return localVariables, nil return localVariables, nil
} }
// ReplaceVariables writes variables into initial string var templateFuncs = template.FuncMap{
func ReplaceVariables(initial string, variables map[string]string) string { "OS": func() string { return runtime.GOOS },
replaced := initial "ARCH": func() string { return runtime.GOARCH },
for name, val := range variables { "IsSH": func() bool { return ShExists },
replaced = strings.Replace(replaced, fmt.Sprintf("{{%s}}", name), val, -1) }
// ReplaceVariables writes vars into initial string
func ReplaceVariables(initial string, vars map[string]string) (string, error) {
t, err := template.New("").Funcs(templateFuncs).Parse(initial)
if err != nil {
return "", err
} }
return replaced b := bytes.NewBuffer(nil)
if err = t.Execute(b, vars); err != nil {
return "", err
}
return b.String(), nil
} }
// GetEnvironmentVariables returns environment variables as map // GetEnvironmentVariables returns environment variables as map