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  }