code: func CloneSelectorAndAddLabel(selector *metav1.LabelSelector, labelKey, labelValue string) *metav1.LabelSelector {
  	if labelKey == "" {
  		// Don't need to add a label.
  		return selector
  	}
  
  	// Clone.
  	newSelector := new(metav1.LabelSelector)
  
  	// TODO(madhusudancs): Check if you can use deepCopy_extensions_LabelSelector here.
  	newSelector.MatchLabels = make(map[string]string)
  	if selector.MatchLabels != nil {
  		for key, val := range selector.MatchLabels {
  			newSelector.MatchLabels[key] = val
  		}
  	}
  	newSelector.MatchLabels[labelKey] = labelValue
  
  	if selector.MatchExpressions != nil {
  		newMExps := make([]metav1.LabelSelectorRequirement, len(selector.MatchExpressions))
  		for i, me := range selector.MatchExpressions {
  			newMExps[i].Key = me.Key
  			newMExps[i].Operator = me.Operator
  			if me.Values != nil {
  				newMExps[i].Values = make([]string, len(me.Values))
  				copy(newMExps[i].Values, me.Values)
  			} else {
  				newMExps[i].Values = nil
  			}
  		}
  		newSelector.MatchExpressions = newMExps
  	} else {
  		newSelector.MatchExpressions = nil
  	}
  
  	return newSelector
  }
docs: // Clones the given selector and returns a new selector with the given key and value added.
  // Returns the given selector, if labelKey is empty.