code: func DeleteRelease(rel *release.Release, vs chartutil.VersionSet, kubeClient environment.KubeClient) (kept string, errs []error) {
  	manifests := relutil.SplitManifests(rel.Manifest)
  	_, files, err := sortManifests(manifests, vs, UninstallOrder)
  	if err != nil {
  		// We could instead just delete everything in no particular order.
  		// FIXME: One way to delete at this point would be to try a label-based
  		// deletion. The problem with this is that we could get a false positive
  		// and delete something that was not legitimately part of this release.
  		return rel.Manifest, []error{fmt.Errorf("corrupted release record. You must manually delete the resources: %s", err)}
  	}
  
  	filesToKeep, filesToDelete := filterManifestsToKeep(files)
  	if len(filesToKeep) > 0 {
  		kept = summarizeKeptManifests(filesToKeep, kubeClient, rel.Namespace)
  	}
  
  	errs = []error{}
  	for _, file := range filesToDelete {
  		b := bytes.NewBufferString(strings.TrimSpace(file.Content))
  		if b.Len() == 0 {
  			continue
  		}
  		if err := kubeClient.Delete(rel.Namespace, b); err != nil {
  			log.Printf("uninstall: Failed deletion of %q: %s", rel.Name, err)
  			if err == kube.ErrNoObjectsVisited {
  				// Rewrite the message from "no objects visited"
  				obj := ""
  				if file.Head != nil && file.Head.Metadata != nil {
  					obj = "[" + file.Head.Kind + "] " + file.Head.Metadata.Name
  				}
  				err = fmt.Errorf("release %q: object %q not found, skipping delete", rel.Name, obj)
  			}
  			errs = append(errs, err)
  		}
  	}
  	return kept, errs
  }
docs: // DeleteRelease is a helper that allows Rudder to delete a release without exposing most of Tiller inner functions