mirror of
				https://github.com/go-task/task.git
				synced 2025-10-30 23:58:01 +02:00 
			
		
		
		
	Switch variable replacing with Go's template engine
This commit is contained in:
		
							
								
								
									
										20
									
								
								task.go
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								task.go
									
									
									
									
									
								
							| @@ -89,7 +89,11 @@ func RunTask(name string) error { | ||||
| 	} | ||||
|  | ||||
| 	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 | ||||
| 		} | ||||
| 	} | ||||
| @@ -130,11 +134,15 @@ func (t *Task) runCommand(i int) error { | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	var ( | ||||
| 		c   = ReplaceVariables(t.Cmds[i], vars) | ||||
| 		dir = ReplaceVariables(t.Dir, vars) | ||||
| 		cmd *exec.Cmd | ||||
| 	) | ||||
| 	c, err := ReplaceVariables(t.Cmds[i], vars) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	dir, err := ReplaceVariables(t.Dir, vars) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
| 	var cmd *exec.Cmd | ||||
| 	if ShExists { | ||||
| 		cmd = exec.Command(ShPath, "-c", c) | ||||
| 	} else { | ||||
|   | ||||
| @@ -1,11 +1,13 @@ | ||||
| package task | ||||
|  | ||||
| import ( | ||||
| 	"bytes" | ||||
| 	"encoding/json" | ||||
| 	"fmt" | ||||
| 	"io/ioutil" | ||||
| 	"os" | ||||
| 	"runtime" | ||||
| 	"strings" | ||||
| 	"text/template" | ||||
|  | ||||
| 	"github.com/BurntSushi/toml" | ||||
| 	"gopkg.in/yaml.v2" | ||||
| @@ -34,13 +36,23 @@ func (t Task) handleVariables() (map[string]string, error) { | ||||
| 	return localVariables, nil | ||||
| } | ||||
|  | ||||
| // ReplaceVariables writes variables into initial string | ||||
| func ReplaceVariables(initial string, variables map[string]string) string { | ||||
| 	replaced := initial | ||||
| 	for name, val := range variables { | ||||
| 		replaced = strings.Replace(replaced, fmt.Sprintf("{{%s}}", name), val, -1) | ||||
| var templateFuncs = template.FuncMap{ | ||||
| 	"OS":   func() string { return runtime.GOOS }, | ||||
| 	"ARCH": func() string { return runtime.GOARCH }, | ||||
| 	"IsSH": func() bool { return ShExists }, | ||||
| } | ||||
|  | ||||
| // 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 | ||||
|   | ||||
		Reference in New Issue
	
	Block a user