@@ -232,7 +232,7 @@ func (m *manager) handleDependencies(skipDependencies, filterDependencies []stri
232232 m .log .Infof ("To display the complete dependency execution log run with the '--verbose-dependencies' flag" )
233233 }
234234
235- executedDependencies , err := m .executeDependenciesRecursive ("" , dependencies , skipDependencies , filterDependencies , reverse , silent , verbose , actionName , action )
235+ executedDependencies , err := m .executeDependenciesRecursive ("" , dependencies , skipDependencies , filterDependencies , reverse , silent , verbose , actionName , action , map [ string ] bool {} )
236236 if err != nil {
237237 hooksErr := hook .ExecuteHooks (m .client , m .config , dependencies , map [string ]interface {}{
238238 "error" : err ,
@@ -252,7 +252,7 @@ func (m *manager) handleDependencies(skipDependencies, filterDependencies []stri
252252 return executedDependencies , nil
253253}
254254
255- func (m * manager ) executeDependenciesRecursive (base string , dependencies []types.Dependency , skipDependencies , filterDependencies []string , reverse , silent , verbose bool , actionName string , action func (dependency * Dependency , log log.Logger ) error ) ([]types.Dependency , error ) {
255+ func (m * manager ) executeDependenciesRecursive (base string , dependencies []types.Dependency , skipDependencies , filterDependencies []string , reverse , silent , verbose bool , actionName string , action func (dependency * Dependency , log log.Logger ) error , executedDependenciesIDs map [ string ] bool ) ([]types.Dependency , error ) {
256256 // Execute all dependencies
257257 i := 0
258258 if reverse {
@@ -267,6 +267,22 @@ func (m *manager) executeDependenciesRecursive(base string, dependencies []types
267267 dependencyLogger = m .log
268268 )
269269
270+ // Increase / Decrease counter
271+ if reverse {
272+ i --
273+ } else {
274+ i ++
275+ }
276+
277+ // skip if dependency was executed already
278+ if executedDependenciesIDs [dependency .ID ()] {
279+ executedDependencies = append (executedDependencies , dependency )
280+ continue
281+ }
282+
283+ // make sure we don't execute the dependency again
284+ executedDependenciesIDs [dependency .ID ()] = true
285+
270286 // get dependency name
271287 dependencyName := dependency .Name ()
272288 if base != "" {
@@ -280,7 +296,7 @@ func (m *manager) executeDependenciesRecursive(base string, dependencies []types
280296 return nil , hooksErr
281297 }
282298
283- _ , err := m .executeDependenciesRecursive (dependencyName , dependency .Children (), skipDependencies , filterDependencies , reverse , silent , verbose , actionName , action )
299+ _ , err := m .executeDependenciesRecursive (dependencyName , dependency .Children (), skipDependencies , filterDependencies , reverse , silent , verbose , actionName , action , executedDependenciesIDs )
284300 if err != nil {
285301 hooksErr := hook .ExecuteHooks (dependency .KubeClient (), dependency .Config (), dependency .Children (), map [string ]interface {}{
286302 "error" : err ,
@@ -298,13 +314,6 @@ func (m *manager) executeDependenciesRecursive(base string, dependencies []types
298314 }
299315 }
300316
301- // Increase / Decrease counter
302- if reverse {
303- i --
304- } else {
305- i ++
306- }
307-
308317 // Check if we should act on this dependency
309318 if ! foundDependency (dependencyName , filterDependencies ) {
310319 continue
0 commit comments