github.com/tilt-dev/tilt@v0.33.15-0.20240515162809-0a22ed45d8a0/internal/k8s/label_selector.go (about) 1 package k8s 2 3 import ( 4 "k8s.io/apimachinery/pkg/labels" 5 "k8s.io/apimachinery/pkg/util/sets" 6 ) 7 8 func setEqual(a, b sets.String) bool { 9 if len(a) != len(b) { 10 return false 11 } 12 13 for k, v := range a { 14 if b[k] != v { 15 return false 16 } 17 } 18 19 return true 20 } 21 22 func requirementEqual(a, b labels.Requirement) bool { 23 return a.Key() == b.Key() && 24 a.Operator() == b.Operator() && 25 setEqual(a.Values(), b.Values()) 26 } 27 28 func requirementsEqual(a, b labels.Requirements) bool { 29 if len(a) != len(b) { 30 return false 31 } 32 33 for i, e1 := range a { 34 if !requirementEqual(e1, b[i]) { 35 return false 36 } 37 } 38 39 return true 40 } 41 42 func SelectorEqual(a, b labels.Selector) bool { 43 reqA, selA := a.Requirements() 44 reqB, selB := b.Requirements() 45 return selA == selB && requirementsEqual(reqA, reqB) 46 }