From 081ccdc75e4646a6b619f16852adb9ce2b4c43d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kevin=20Wiesm=C3=BCller?= Date: Sat, 2 Mar 2019 12:07:19 +0100 Subject: [PATCH] cleanup sort implementation --- .../handlers/fieldmanager/internal/BUILD | 1 - .../fieldmanager/internal/managedfields.go | 25 ++++---- .../handlers/fieldmanager/internal/sort.go | 61 ------------------- 3 files changed, 12 insertions(+), 75 deletions(-) delete mode 100644 staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/sort.go diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD index c7520962099..64d62276e9b 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/BUILD @@ -8,7 +8,6 @@ go_library( "gvkparser.go", "managedfields.go", "pathelement.go", - "sort.go", "typeconverter.go", "versionconverter.go", ], diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go index 76b2c1fb83f..85a9e826693 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/managedfields.go @@ -150,24 +150,23 @@ func encodeManagedFields(managedFields fieldpath.ManagedFields) (encodedManagedF } func sortEncodedManagedFields(encodedManagedFields []metav1.ManagedFieldsEntry) (sortedManagedFields []metav1.ManagedFieldsEntry, err error) { - operation := func(p, q metav1.ManagedFieldsEntry) bool { - return p.Operation < q.Operation - } - timestamp := func(p, q metav1.ManagedFieldsEntry) bool { + sort.Slice(encodedManagedFields, func(i, j int) bool { + p, q := encodedManagedFields[i], encodedManagedFields[j] + + if p.Operation != q.Operation { + return p.Operation < q.Operation + } + if p.Time == nil || q.Time == nil { return false } - return q.Time.Before(p.Time) - } - manager := func(p, q metav1.ManagedFieldsEntry) bool { + if !p.Time.Equal(q.Time) { + return q.Time.Before(p.Time) + } + return p.Manager < q.Manager - } + }) - sorter := &managedFieldsSorter{ - less: []managedFieldsLessFunc{operation, timestamp, manager}, - } - - sorter.Sort(encodedManagedFields) return encodedManagedFields, nil } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/sort.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/sort.go deleted file mode 100644 index 6e90f27498c..00000000000 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/fieldmanager/internal/sort.go +++ /dev/null @@ -1,61 +0,0 @@ -/* -Copyright 2019 The Kubernetes Authors. - -Licensed under the Apache License, Version 2.0 (the "License"); -you may not use this file except in compliance with the License. -You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. -*/ - -package internal - -import ( - "sort" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -type managedFieldsLessFunc func(p, q metav1.ManagedFieldsEntry) bool - -type managedFieldsSorter struct { - fields []metav1.ManagedFieldsEntry - less []managedFieldsLessFunc -} - -func (s *managedFieldsSorter) Sort(fields []metav1.ManagedFieldsEntry) { - s.fields = fields - sort.Sort(s) -} - -// Len is the amount of managedFields to sort -func (s *managedFieldsSorter) Len() int { - return len(s.fields) -} - -// Swap is part of sort.Interface. -func (s *managedFieldsSorter) Swap(p, q int) { - s.fields[p], s.fields[q] = s.fields[q], s.fields[p] -} - -// Less is part of sort.Interface -func (s *managedFieldsSorter) Less(p, q int) bool { - a, b := s.fields[p], s.fields[q] - var k int - for k = 0; k < len(s.less)-1; k++ { - less := s.less[k] - switch { - case less(a, b): - return true - case less(b, a): - return false - } - } - return s.less[k](a, b) -}