From 95b75c5330487b254e9ea8b59948a1f45746561d Mon Sep 17 00:00:00 2001 From: Andrey Nering Date: Sun, 9 Dec 2018 15:54:58 -0200 Subject: [PATCH] Fix issue on running dependencies or tasks on included Taskfiles Fixes #151 --- internal/taskfile/merge.go | 13 +++++++++++++ task_test.go | 14 ++++++++++++++ testdata/includes_deps/.gitignore | 1 + testdata/includes_deps/Taskfile.yml | 9 +++++++++ testdata/includes_deps/Taskfile2.yml | 16 ++++++++++++++++ 5 files changed, 53 insertions(+) create mode 100644 testdata/includes_deps/.gitignore create mode 100644 testdata/includes_deps/Taskfile.yml create mode 100644 testdata/includes_deps/Taskfile2.yml 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