releaseutil/kind_sorter: make lessByKind return a lessFunc rather than sorting directly

By doing this, we only convert the KindSortOrder slice to a map once, rather than on each comparison step.

Co-authored-by: Alvaro Cabanas <acabanas@newrelic.com>
Co-authored-by: Paolo Gallina <paologallina1992@gmail.com>
Signed-off-by: Roberto Santalla <roobre@roobre.es>
pull/10787/head
Roberto Santalla 4 years ago
parent 5c88439507
commit b6f876a64a
No known key found for this signature in database
GPG Key ID: 1782D4B0212C2D9C

@ -111,8 +111,9 @@ var UninstallOrder KindSortOrder = []string{
//
// Results are sorted by 'ordering', keeping order of items with equal kind/priority
func sortManifestsByKind(manifests []Manifest, ordering KindSortOrder) []Manifest {
lessFunc := lessByKind(ordering)
sort.SliceStable(manifests, func(i, j int) bool {
return lessByKind(manifests[i], manifests[j], manifests[i].Head.Kind, manifests[j].Head.Kind, ordering)
return lessFunc(manifests[i].Head.Kind, manifests[j].Head.Kind)
})
return manifests
@ -129,8 +130,9 @@ func sortHooks(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook {
})
// Then sort by kind, keeping equal elements in their original order (Stable).
lessFunc := lessByKind(ordering)
sort.SliceStable(h, func(i, j int) bool {
return lessByKind(h[i], h[j], h[i].Kind, h[j].Kind, ordering)
return lessFunc(h[i].Kind, h[j].Kind)
})
// Finally, sort by weight, again keeping equal elements in their original order.
@ -141,12 +143,14 @@ func sortHooks(hooks []*release.Hook, ordering KindSortOrder) []*release.Hook {
return h
}
func lessByKind(a interface{}, b interface{}, kindA string, kindB string, o KindSortOrder) bool {
// lessByKind takes a KindSortOrder and returns a LessFunc that compares two kinds according to said order.
func lessByKind(o KindSortOrder) func(kindA string, kindB string) bool {
ordering := make(map[string]int, len(o))
for v, k := range o {
ordering[k] = v
}
return func(kindA string, kindB string) bool {
first, aok := ordering[kindA]
second, bok := ordering[kindB]
@ -167,3 +171,4 @@ func lessByKind(a interface{}, b interface{}, kindA string, kindB string, o Kind
// sort different kinds, keep original order if same priority
return first < second
}
}

Loading…
Cancel
Save