Objectify nbrSlice code.

This commit is contained in:
Jeffrey Regan
2018-10-12 13:46:13 -07:00
parent f94974cc2c
commit b198b65d52
5 changed files with 36 additions and 37 deletions

View File

@@ -85,3 +85,11 @@ func (fs FieldSpec) PathSlice() []string {
} }
return result return result
} }
type fsSlice []FieldSpec
func (s fsSlice) Len() int { return len(s) }
func (s fsSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s fsSlice) Less(i, j int) bool {
return s[i].Gvk.IsLessThan(s[j].Gvk)
}

View File

@@ -17,8 +17,9 @@ limitations under the License.
package config package config
import ( import (
"sigs.k8s.io/kustomize/pkg/gvk"
"strings" "strings"
"sigs.k8s.io/kustomize/pkg/gvk"
) )
// NameBackReferences is an association between a gvk.GVK and a list // NameBackReferences is an association between a gvk.GVK and a list
@@ -63,21 +64,27 @@ func (n NameBackReferences) String() string {
strings.Join(r, "\n") + "\n)" strings.Join(r, "\n") + "\n)"
} }
func mergeNameBackReferences( type nbrSlice []NameBackReferences
a, b []NameBackReferences) []NameBackReferences {
for _, r := range b { func (s nbrSlice) Len() int { return len(s) }
a = merge(a, r) func (s nbrSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
} func (s nbrSlice) Less(i, j int) bool {
return a return s[i].Gvk.IsLessThan(s[j].Gvk)
} }
func merge( func (s nbrSlice) mergeAll(o nbrSlice) nbrSlice {
backRefsSlice []NameBackReferences, result := s
other NameBackReferences) []NameBackReferences { for _, r := range o {
var result []NameBackReferences result = result.mergeOne(r)
}
return result
}
func (s nbrSlice) mergeOne(other NameBackReferences) nbrSlice {
var result nbrSlice
found := false found := false
for _, c := range backRefsSlice { for _, c := range s {
if c.Equals(other.Gvk) { if c.Gvk.Equals(other.Gvk) {
c.FieldSpecs = append(c.FieldSpecs, other.FieldSpecs...) c.FieldSpecs = append(c.FieldSpecs, other.FieldSpecs...)
found = true found = true
} }

View File

@@ -22,7 +22,7 @@ import (
"testing" "testing"
) )
func TestFoo(t *testing.T) { func TestMergeAll(t *testing.T) {
fsSlice1 := []FieldSpec{ fsSlice1 := []FieldSpec{
{ {
Gvk: gvk.Gvk{ Gvk: gvk.Gvk{
@@ -56,7 +56,7 @@ func TestFoo(t *testing.T) {
}, },
} }
nbrsSlice1 := []NameBackReferences{ nbrsSlice1 := nbrSlice{
{ {
Gvk: gvk.Gvk{ Gvk: gvk.Gvk{
Kind: "ConfigMap", Kind: "ConfigMap",
@@ -70,7 +70,7 @@ func TestFoo(t *testing.T) {
FieldSpecs: fsSlice2, FieldSpecs: fsSlice2,
}, },
} }
nbrsSlice2 := []NameBackReferences{ nbrsSlice2 := nbrSlice{
{ {
Gvk: gvk.Gvk{ Gvk: gvk.Gvk{
Kind: "ConfigMap", Kind: "ConfigMap",
@@ -84,7 +84,7 @@ func TestFoo(t *testing.T) {
FieldSpecs: fsSlice2, FieldSpecs: fsSlice2,
}, },
} }
expected := []NameBackReferences{ expected := nbrSlice{
{ {
Gvk: gvk.Gvk{ Gvk: gvk.Gvk{
Kind: "ConfigMap", Kind: "ConfigMap",
@@ -99,7 +99,7 @@ func TestFoo(t *testing.T) {
FieldSpecs: append(fsSlice2, fsSlice2...), FieldSpecs: append(fsSlice2, fsSlice2...),
}, },
} }
actual := mergeNameBackReferences(nbrsSlice1, nbrsSlice2) actual := nbrsSlice1.mergeAll(nbrsSlice2)
if !reflect.DeepEqual(actual, expected) { if !reflect.DeepEqual(actual, expected) {
t.Fatalf("expected\n %v\n but got\n %v\n", expected, actual) t.Fatalf("expected\n %v\n but got\n %v\n", expected, actual)
} }

View File

@@ -22,22 +22,6 @@ import (
"sort" "sort"
) )
type nbrSlice []NameBackReferences
func (s nbrSlice) Len() int { return len(s) }
func (s nbrSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s nbrSlice) Less(i, j int) bool {
return s[i].Gvk.IsLessThan(s[j].Gvk)
}
type fsSlice []FieldSpec
func (s fsSlice) Len() int { return len(s) }
func (s fsSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] }
func (s fsSlice) Less(i, j int) bool {
return s[i].Gvk.IsLessThan(s[j].Gvk)
}
// TransformerConfig holds the data needed to perform transformations. // TransformerConfig holds the data needed to perform transformations.
type TransformerConfig struct { type TransformerConfig struct {
NamePrefix fsSlice `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"` NamePrefix fsSlice `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"`
@@ -75,7 +59,7 @@ func (t *TransformerConfig) AddAnnotationFieldSpec(fs FieldSpec) {
// AddNamereferenceFieldSpec adds a NameBackReferences to NameReference // AddNamereferenceFieldSpec adds a NameBackReferences to NameReference
func (t *TransformerConfig) AddNamereferenceFieldSpec(nbrs NameBackReferences) { func (t *TransformerConfig) AddNamereferenceFieldSpec(nbrs NameBackReferences) {
t.NameReference = mergeNameBackReferences(t.NameReference, []NameBackReferences{nbrs}) t.NameReference = t.NameReference.mergeOne(nbrs)
} }
// Merge merges two TransformerConfigs objects into a new TransformerConfig object // Merge merges two TransformerConfigs objects into a new TransformerConfig object
@@ -86,7 +70,7 @@ func (t *TransformerConfig) Merge(input *TransformerConfig) *TransformerConfig {
merged.CommonAnnotations = append(t.CommonAnnotations, input.CommonAnnotations...) merged.CommonAnnotations = append(t.CommonAnnotations, input.CommonAnnotations...)
merged.CommonLabels = append(t.CommonLabels, input.CommonLabels...) merged.CommonLabels = append(t.CommonLabels, input.CommonLabels...)
merged.VarReference = append(t.VarReference, input.VarReference...) merged.VarReference = append(t.VarReference, input.VarReference...)
merged.NameReference = mergeNameBackReferences(t.NameReference, input.NameReference) merged.NameReference = t.NameReference.mergeAll(input.NameReference)
merged.sortFields() merged.sortFields()
return merged return merged
} }

View File

@@ -44,7 +44,7 @@ func TestAddNamereferenceFieldSpec(t *testing.T) {
cfg.AddNamereferenceFieldSpec(nbrs) cfg.AddNamereferenceFieldSpec(nbrs)
if len(cfg.NameReference) != 1 { if len(cfg.NameReference) != 1 {
t.Fatal("failed to add namerefence FieldSpec") t.Fatal("failed to add namereference FieldSpec")
} }
} }