mirror of
https://github.com/go-task/task.git
synced 2025-02-03 13:22:11 +02:00
feat: merge template func should support variadic list of maps (#1464)
This commit is contained in:
parent
40b6150030
commit
94aaea390f
@ -1292,8 +1292,8 @@ Task also adds the following functions:
|
||||
based on a base path (first argument). The same as Go's
|
||||
[filepath.Rel](https://pkg.go.dev/path/filepath#Rel).
|
||||
- `merge`: Creates a new map that is a copy of the first map with the keys of
|
||||
the second map merged into it. If there are duplicate keys, the value of the
|
||||
second map is used.
|
||||
each subsequent map merged into it. If there is a duplicate key, the value of
|
||||
the last map with that key is used.
|
||||
- `spew`: Returns the Go representation of a specific variable. Useful for
|
||||
debugging. Uses the [davecgh/go-spew](https://github.com/davecgh/go-spew)
|
||||
package.
|
||||
|
@ -53,15 +53,21 @@ func init() {
|
||||
"relPath": func(basePath, targetPath string) (string, error) {
|
||||
return filepath.Rel(basePath, targetPath)
|
||||
},
|
||||
"merge": func(a, b map[string]any) map[string]any {
|
||||
m := make(map[string]any, len(a)+len(b))
|
||||
for k, v := range a {
|
||||
m[k] = v
|
||||
"merge": func(base map[string]any, v ...map[string]any) map[string]any {
|
||||
cap := len(v)
|
||||
for _, m := range v {
|
||||
cap += len(m)
|
||||
}
|
||||
for k, v := range b {
|
||||
m[k] = v
|
||||
result := make(map[string]any, cap)
|
||||
for k, v := range base {
|
||||
result[k] = v
|
||||
}
|
||||
return m
|
||||
for _, m := range v {
|
||||
for k, v := range m {
|
||||
result[k] = v
|
||||
}
|
||||
}
|
||||
return result
|
||||
},
|
||||
"spew": func(v any) string {
|
||||
return spew.Sdump(v)
|
||||
|
5
testdata/vars/any/Taskfile.yml
vendored
5
testdata/vars/any/Taskfile.yml
vendored
@ -61,9 +61,10 @@ tasks:
|
||||
map:
|
||||
vars:
|
||||
MAP_1: {A: 1, B: 2, C: 3}
|
||||
MAP_2: {D: 4, E: 5, F: 6}
|
||||
MAP_2: {B: 4, C: 5, D: 6}
|
||||
MAP_3: {C: 7, D: 8, E: 9}
|
||||
cmds:
|
||||
- echo '{{merge .MAP_1 .MAP_2}}'
|
||||
- echo '{{merge .MAP_1 .MAP_2 .MAP_3}}'
|
||||
|
||||
for-string:
|
||||
vars:
|
||||
|
Loading…
x
Reference in New Issue
Block a user