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
}
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
import (
"sigs.k8s.io/kustomize/pkg/gvk"
"strings"
"sigs.k8s.io/kustomize/pkg/gvk"
)
// 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)"
}
func mergeNameBackReferences(
a, b []NameBackReferences) []NameBackReferences {
for _, r := range b {
a = merge(a, r)
}
return a
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)
}
func merge(
backRefsSlice []NameBackReferences,
other NameBackReferences) []NameBackReferences {
var result []NameBackReferences
func (s nbrSlice) mergeAll(o nbrSlice) nbrSlice {
result := s
for _, r := range o {
result = result.mergeOne(r)
}
return result
}
func (s nbrSlice) mergeOne(other NameBackReferences) nbrSlice {
var result nbrSlice
found := false
for _, c := range backRefsSlice {
if c.Equals(other.Gvk) {
for _, c := range s {
if c.Gvk.Equals(other.Gvk) {
c.FieldSpecs = append(c.FieldSpecs, other.FieldSpecs...)
found = true
}

View File

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

View File

@@ -22,22 +22,6 @@ import (
"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.
type TransformerConfig struct {
NamePrefix fsSlice `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"`
@@ -75,7 +59,7 @@ func (t *TransformerConfig) AddAnnotationFieldSpec(fs FieldSpec) {
// AddNamereferenceFieldSpec adds a NameBackReferences to NameReference
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
@@ -86,7 +70,7 @@ func (t *TransformerConfig) Merge(input *TransformerConfig) *TransformerConfig {
merged.CommonAnnotations = append(t.CommonAnnotations, input.CommonAnnotations...)
merged.CommonLabels = append(t.CommonLabels, input.CommonLabels...)
merged.VarReference = append(t.VarReference, input.VarReference...)
merged.NameReference = mergeNameBackReferences(t.NameReference, input.NameReference)
merged.NameReference = t.NameReference.mergeAll(input.NameReference)
merged.sortFields()
return merged
}

View File

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