diff --git a/internal/taskfile/merge.go b/internal/taskfile/merge.go index a0c71748..b2b32ef9 100644 --- a/internal/taskfile/merge.go +++ b/internal/taskfile/merge.go @@ -39,7 +39,20 @@ func Merge(t1, t2 *Taskfile, namespaces ...string) error { t1.Tasks = make(Tasks) } for k, v := range t2.Tasks { + // FIXME(@andreynering): Refactor this block, otherwise we can + // have serious side-effects in the future, since we're editing + // the original references instead of deep copying them. + t1.Tasks[taskNameWithNamespace(k, namespaces...)] = v + + for _, dep := range v.Deps { + dep.Task = taskNameWithNamespace(dep.Task, namespaces...) + } + for _, cmd := range v.Cmds { + if cmd.Task != "" { + cmd.Task = taskNameWithNamespace(cmd.Task, namespaces...) + } + } } return nil diff --git a/task_test.go b/task_test.go index 7504d140..e4dbd766 100644 --- a/task_test.go +++ b/task_test.go @@ -496,3 +496,17 @@ func TestIncludesEmptyMain(t *testing.T) { } tt.Run(t) } + +func TestIncludesDependencies(t *testing.T) { + tt := fileContentTest{ + Dir: "testdata/includes_deps", + Target: "default", + TrimSpace: true, + Files: map[string]string{ + "default.txt": "default", + "called_dep.txt": "called_dep", + "called_task.txt": "called_task", + }, + } + tt.Run(t) +} diff --git a/testdata/includes_deps/.gitignore b/testdata/includes_deps/.gitignore new file mode 100644 index 00000000..2211df63 --- /dev/null +++ b/testdata/includes_deps/.gitignore @@ -0,0 +1 @@ +*.txt diff --git a/testdata/includes_deps/Taskfile.yml b/testdata/includes_deps/Taskfile.yml new file mode 100644 index 00000000..e6d4d186 --- /dev/null +++ b/testdata/includes_deps/Taskfile.yml @@ -0,0 +1,9 @@ +version: '2' + +includes: + included: Taskfile2.yml + +tasks: + default: + cmds: + - task: included:default diff --git a/testdata/includes_deps/Taskfile2.yml b/testdata/includes_deps/Taskfile2.yml new file mode 100644 index 00000000..27eb2b97 --- /dev/null +++ b/testdata/includes_deps/Taskfile2.yml @@ -0,0 +1,16 @@ +version: '2' + +tasks: + default: + deps: [called_dep] + cmds: + - echo "default" > default.txt + - task: called_task + + called_dep: + cmds: + - echo "called_dep" > called_dep.txt + + called_task: + cmds: + - echo "called_task" > called_task.txt