diff --git a/internal/taskfile/merge.go b/internal/taskfile/merge.go new file mode 100644 index 000000000..4825cb1de --- /dev/null +++ b/internal/taskfile/merge.go @@ -0,0 +1,27 @@ +package taskfile + +import ( + "fmt" +) + +// Merge merges the second Taskfile into the first +func Merge(t1, t2 *Taskfile) error { + if t1.Version != t2.Version { + return fmt.Errorf(`Taskfiles versions should match. First is "%s" but second is "%s"`, t1.Version, t2.Version) + } + + if t2.Expansions != 0 && t2.Expansions != 2 { + t1.Expansions = t2.Expansions + } + if t2.Output != "" { + t1.Output = t2.Output + } + for k, v := range t2.Vars { + t1.Vars[k] = v + } + for k, v := range t2.Tasks { + t1.Tasks[k] = v + } + + return nil +} diff --git a/internal/taskfile/read/taskfile.go b/internal/taskfile/read/taskfile.go index c3f0c77ea..e7c3b7971 100644 --- a/internal/taskfile/read/taskfile.go +++ b/internal/taskfile/read/taskfile.go @@ -8,7 +8,6 @@ import ( "github.com/go-task/task/internal/taskfile" - "github.com/imdario/mergo" "gopkg.in/yaml.v2" ) @@ -26,10 +25,7 @@ func Taskfile(dir string) (*taskfile.Taskfile, error) { if err != nil { return nil, err } - if t.Version != osTaskfile.Version { - return nil, fmt.Errorf(`Taskfile versions should match. Taskfile.yml is "%s" but Taskfile_%s.yml is "%s"`, t.Version, runtime.GOOS, osTaskfile.Version) - } - if err = mergo.MapWithOverwrite(&t.Tasks, osTaskfile.Tasks); err != nil { + if err = taskfile.Merge(t, osTaskfile); err != nil { return nil, err } }