code: func listReplicaSets(deployment *appsv1.Deployment, getRSList rsListFunc) ([]*appsv1.ReplicaSet, error) {
  	// TODO: Right now we list replica sets by their labels. We should list them by selector, i.e. the replica set's selector
  	//       should be a superset of the deployment's selector, see https://github.com/kubernetes/kubernetes/issues/19830.
  	namespace := deployment.Namespace
  	selector, err := metav1.LabelSelectorAsSelector(deployment.Spec.Selector)
  	if err != nil {
  		return nil, err
  	}
  	options := metav1.ListOptions{LabelSelector: selector.String()}
  	all, err := getRSList(namespace, options)
  	if err != nil {
  		return nil, err
  	}
  	// Only include those whose ControllerRef matches the Deployment.
  	owned := make([]*appsv1.ReplicaSet, 0, len(all))
  	for _, rs := range all {
  		if metav1.IsControlledBy(rs, deployment) {
  			owned = append(owned, rs)
  		}
  	}
  	return owned, nil
  }
docs: // listReplicaSets returns a slice of RSes the given deployment targets.
  // Note that this does NOT attempt to reconcile ControllerRef (adopt/orphan),
  // because only the controller itself should do that.
  // However, it does filter out anything whose ControllerRef doesn't match.