1
0
mirror of https://github.com/go-task/task.git synced 2025-11-25 22:32:55 +02:00

fix: deep copy included tasks

This commit is contained in:
Pete Davison
2022-10-02 05:45:27 +00:00
parent bb79fa1dc3
commit d33906b6e4
5 changed files with 89 additions and 10 deletions

View File

@@ -39,19 +39,14 @@ func Merge(t1, t2 *Taskfile, includedTaskfile *IncludedTaskfile, namespaces ...s
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.
task := v
// We do a deep copy of the task struct here to ensure that no data can
// be changed elsewhere once the taskfile is merged.
task := v.DeepCopy()
// Set the task to internal if EITHER the included task or the included
// taskfile are marked as internal
task.Internal = task.Internal || includedTaskfile.Internal
// Deep copy the aliases so we can use them later
origAliases := make([]string, len(task.Aliases))
copy(origAliases, task.Aliases)
// Add namespaces to dependencies, commands and aliases
for _, dep := range task.Deps {
dep.Task = taskNameWithNamespace(dep.Task, namespaces...)
@@ -67,8 +62,8 @@ func Merge(t1, t2 *Taskfile, includedTaskfile *IncludedTaskfile, namespaces ...s
// Add namespace aliases
if includedTaskfile != nil {
for _, namespaceAlias := range includedTaskfile.Aliases {
for _, alias := range origAliases {
task.Aliases = append(v.Aliases, taskNameWithNamespace(alias, namespaceAlias))
for _, alias := range v.Aliases {
task.Aliases = append(task.Aliases, taskNameWithNamespace(alias, namespaceAlias))
}
}
}