@@ -112,37 +112,34 @@ type Registry []*Registration
112112// Graph computes the ordered list of registrations based on their dependencies,
113113// filtering out any plugins which match the provided filter.
114114func (registry Registry ) Graph (filter DisableFilter ) []Registration {
115- disabled := map [* Registration ]bool {}
116- for _ , r := range registry {
117- if filter (r ) {
118- disabled [r ] = true
115+ handled := make (map [* Registration ]bool , len (registry ))
116+ if filter != nil {
117+ for _ , r := range registry {
118+ if filter (r ) {
119+ handled [r ] = true
120+ }
119121 }
120122 }
121123
122- ordered := make ([]Registration , 0 , len (registry )- len (disabled ))
123- added := map [* Registration ]bool {}
124+ ordered := make ([]Registration , 0 , len (registry )- len (handled ))
124125 for _ , r := range registry {
125- if disabled [r ] {
126+ if handled [r ] {
126127 continue
127128 }
128- children (r , registry , added , disabled , & ordered )
129- if ! added [r ] {
130- ordered = append (ordered , * r )
131- added [r ] = true
132- }
129+ handled [r ] = true
130+ children (r , registry , handled , & ordered )
131+ ordered = append (ordered , * r )
133132 }
134133 return ordered
135134}
136135
137- func children (reg * Registration , registry []* Registration , added , disabled map [* Registration ]bool , ordered * []Registration ) {
136+ func children (reg * Registration , registry []* Registration , handled map [* Registration ]bool , ordered * []Registration ) {
138137 for _ , t := range reg .Requires {
139138 for _ , r := range registry {
140- if (t == "*" || r .Type == t ) && r != reg && ! disabled [r ] {
141- children (r , registry , added , disabled , ordered )
142- if ! added [r ] {
143- * ordered = append (* ordered , * r )
144- added [r ] = true
145- }
139+ if (t == "*" || r .Type == t ) && r != reg && ! handled [r ] {
140+ handled [r ] = true
141+ children (r , registry , handled , ordered )
142+ * ordered = append (* ordered , * r )
146143 }
147144 }
148145 }
0 commit comments