You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
91 lines
2.8 KiB
91 lines
2.8 KiB
5 years ago
|
From c9a5b0bb49b91a463c0021dd5dbe9626e2d3bb11 Mon Sep 17 00:00:00 2001
|
||
|
From: Filinto Duran <duranto@gmail.com>
|
||
|
Date: Fri, 14 Dec 2018 10:20:57 -0600
|
||
|
Subject: [PATCH] fixes #4728 problem that arise because of the zero value of
|
||
|
unknown and the loging of kind_sorter this messes helm template when having
|
||
|
unknown (ie NOTES) or other files and the sorter catches namespace
|
||
|
|
||
|
Signed-off-by: Filinto Duran <duranto@gmail.com>
|
||
|
---
|
||
|
pkg/tiller/kind_sorter.go | 13 ++++++++----
|
||
|
pkg/tiller/kind_sorter_test.go | 36 ++++++++++++++++++++++++++++++++++
|
||
|
2 files changed, 45 insertions(+), 4 deletions(-)
|
||
|
|
||
|
diff --git a/pkg/tiller/kind_sorter.go b/pkg/tiller/kind_sorter.go
|
||
|
index 8aff4e6c11..7df63c6ac4 100644
|
||
|
--- a/pkg/tiller/kind_sorter.go
|
||
|
+++ b/pkg/tiller/kind_sorter.go
|
||
|
@@ -124,12 +124,13 @@ func (k *kindSorter) Less(i, j int) bool {
|
||
|
b := k.manifests[j]
|
||
|
first, aok := k.ordering[a.Head.Kind]
|
||
|
second, bok := k.ordering[b.Head.Kind]
|
||
|
- // if same kind (including unknown) sub sort alphanumeric
|
||
|
- if first == second {
|
||
|
- // if both are unknown and of different kind sort by kind alphabetically
|
||
|
- if !aok && !bok && a.Head.Kind != b.Head.Kind {
|
||
|
+ // if both are unknown
|
||
|
+ if !aok && !bok {
|
||
|
+ // and of different kind sort by kind alphabetically
|
||
|
+ if a.Head.Kind != b.Head.Kind {
|
||
|
return a.Head.Kind < b.Head.Kind
|
||
|
}
|
||
|
+ // and of same kind sort by name alphabetically
|
||
|
return a.Name < b.Name
|
||
|
}
|
||
|
// unknown kind is last
|
||
|
@@ -139,6 +140,10 @@ func (k *kindSorter) Less(i, j int) bool {
|
||
|
if !bok {
|
||
|
return true
|
||
|
}
|
||
|
+ // if same kind sort alphanumeric
|
||
|
+ if first == second {
|
||
|
+ return a.Name < b.Name
|
||
|
+ }
|
||
|
// sort different kinds
|
||
|
return first < second
|
||
|
}
|
||
|
diff --git a/pkg/tiller/kind_sorter_test.go b/pkg/tiller/kind_sorter_test.go
|
||
|
index 1c187e90d5..823d9674ee 100644
|
||
|
--- a/pkg/tiller/kind_sorter_test.go
|
||
|
+++ b/pkg/tiller/kind_sorter_test.go
|
||
|
@@ -223,3 +223,39 @@ func TestKindSorterSubSort(t *testing.T) {
|
||
|
})
|
||
|
}
|
||
|
}
|
||
|
+
|
||
|
+func TestKindSorterUnknownsWithNamespace(t *testing.T) {
|
||
|
+ // a.Kind=Namespace should win over b.Kind=Unknown even if the a.Name > b.Name
|
||
|
+ manifests := []Manifest{
|
||
|
+ {
|
||
|
+ Name: "a",
|
||
|
+ Head: &util.SimpleHead{Kind: "Namespace"},
|
||
|
+ },
|
||
|
+ {
|
||
|
+ Name: "N",
|
||
|
+ Head: &util.SimpleHead{Kind: "Unknown"},
|
||
|
+ },
|
||
|
+ }
|
||
|
+ for _, test := range []struct {
|
||
|
+ description string
|
||
|
+ order SortOrder
|
||
|
+ expected string
|
||
|
+ }{
|
||
|
+ // expectation is sorted by kind (unknown is last) and then sub sorted alphabetically within each group
|
||
|
+ {"Namespace,Unknown", InstallOrder, "aN"},
|
||
|
+ } {
|
||
|
+ var buf bytes.Buffer
|
||
|
+ t.Run(test.description, func(t *testing.T) {
|
||
|
+
|
||
|
+ defer buf.Reset()
|
||
|
+ m := make([]Manifest, len(manifests))
|
||
|
+ copy(m, manifests)
|
||
|
+ for _, r := range sortByKind(m, test.order) {
|
||
|
+ buf.WriteString(r.Name)
|
||
|
+ }
|
||
|
+ if got := buf.String(); got != test.expected {
|
||
|
+ t.Errorf("Expected %q, got %q", test.expected, got)
|
||
|
+ }
|
||
|
+ })
|
||
|
+ }
|
||
|
+}
|