code: func (strategy) PrepareForUpdate(ctx context.Context, obj, old runtime.Object) {
  	newCRD := obj.(*apiextensions.CustomResourceDefinition)
  	oldCRD := old.(*apiextensions.CustomResourceDefinition)
  	newCRD.Status = oldCRD.Status
  
  	// Any changes to the spec increment the generation number, any changes to the
  	// status should reflect the generation number of the corresponding object. We push
  	// the burden of managing the status onto the clients because we can't (in general)
  	// know here what version of spec the writer of the status has seen. It may seem like
  	// we can at first -- since obj contains spec -- but in the future we will probably make
  	// status its own object, and even if we don't, writes may be the result of a
  	// read-update-write loop, so the contents of spec may not actually be the spec that
  	// the controller has *seen*.
  	if !apiequality.Semantic.DeepEqual(oldCRD.Spec, newCRD.Spec) {
  		newCRD.Generation = oldCRD.Generation + 1
  	}
  
  	dropDisabledFields(&newCRD.Spec, &oldCRD.Spec)
  
  	for _, v := range newCRD.Spec.Versions {
  		if v.Storage {
  			if !apiextensions.IsStoredVersion(newCRD, v.Name) {
  				newCRD.Status.StoredVersions = append(newCRD.Status.StoredVersions, v.Name)
  			}
  			break
  		}
  	}
  }
docs: // PrepareForUpdate clears fields that are not allowed to be set by end users on update.