MCPcopy Index your code
hub / github.com/go-task/task / Merge

Method Merge

taskfile/ast/tasks.go:121–209  ·  view source on GitHub ↗
(t2 *Tasks, include *Include, includedTaskfileVars *Vars)

Source from the content-addressed store, hash-verified

119}
120
121func (t1 *Tasks) Merge(t2 *Tasks, include *Include, includedTaskfileVars *Vars) error {
122 defer t2.mutex.RUnlock()
123 t2.mutex.RLock()
124 for name, v := range t2.All(nil) {
125 // We do a deep copy of the task struct here to ensure that no data can
126 // be changed elsewhere once the taskfile is merged.
127 task := v.DeepCopy()
128 // Set the task to internal if EITHER the included task or the included
129 // taskfile are marked as internal
130 task.Internal = task.Internal || (include != nil && include.Internal)
131 taskName := name
132
133 // if the task is in the exclude list, don't add it to the merged taskfile
134 if slices.Contains(include.Excludes, name) {
135 continue
136 }
137
138 if !include.Flatten {
139 // Add namespaces to task dependencies
140 for _, dep := range task.Deps {
141 if dep != nil && dep.Task != "" {
142 dep.Task = taskNameWithNamespace(dep.Task, include.Namespace)
143 }
144 }
145
146 // Add namespaces to task commands
147 for _, cmd := range task.Cmds {
148 if cmd != nil && cmd.Task != "" {
149 cmd.Task = taskNameWithNamespace(cmd.Task, include.Namespace)
150 }
151 }
152
153 // Add namespaces to task aliases
154 for i, alias := range task.Aliases {
155 task.Aliases[i] = taskNameWithNamespace(alias, include.Namespace)
156 }
157
158 // Add namespace aliases
159 if include != nil {
160 for _, namespaceAlias := range include.Aliases {
161 task.Aliases = append(task.Aliases, taskNameWithNamespace(task.Task, namespaceAlias))
162 for _, alias := range v.Aliases {
163 task.Aliases = append(task.Aliases, taskNameWithNamespace(alias, namespaceAlias))
164 }
165 }
166 }
167
168 taskName = taskNameWithNamespace(name, include.Namespace)
169 task.Namespace = include.Namespace
170 task.Task = taskName
171 }
172
173 if include.AdvancedImport {
174 task.Dir = filepathext.SmartJoin(include.Dir, task.Dir)
175 if task.IncludeVars == nil {
176 task.IncludeVars = NewVars()
177 }
178 task.IncludeVars.Merge(include.Vars, nil)

Callers

nothing calls this directly

Calls 7

GetMethod · 0.95
SetMethod · 0.95
SmartJoinFunction · 0.92
taskNameWithNamespaceFunction · 0.85
NewVarsFunction · 0.85
DeepCopyMethod · 0.65
AllMethod · 0.45

Tested by

no test coverage detected