code: func PrintRolloutHistory(historyInfo HistoryInfo, resource, name string) (string, error) {
  	if len(historyInfo.RevisionToTemplate) == 0 {
  		return fmt.Sprintf("No rollout history found in %s %q", resource, name), nil
  	}
  	// Sort the revisionToChangeCause map by revision
  	var revisions []string
  	for k := range historyInfo.RevisionToTemplate {
  		revisions = append(revisions, strconv.FormatInt(k, 10))
  	}
  	sort.Strings(revisions)
  
  	return tabbedString(func(out io.Writer) error {
  		fmt.Fprintf(out, "%s %q:\n", resource, name)
  		fmt.Fprintf(out, "REVISION\tCHANGE-CAUSE\n")
  		errs := []error{}
  		for _, r := range revisions {
  			// Find the change-cause of revision r
  			r64, err := strconv.ParseInt(r, 10, 64)
  			if err != nil {
  				errs = append(errs, err)
  				continue
  			}
  			changeCause := historyInfo.RevisionToTemplate[r64].Annotations[ChangeCauseAnnotation]
  			if len(changeCause) == 0 {
  				changeCause = "<none>"
  			}
  			fmt.Fprintf(out, "%s\t%s\n", r, changeCause)
  		}
  		return errors.NewAggregate(errs)
  	})
  }
docs: // PrintRolloutHistory prints a formatted table of the input revision history of the deployment