code: func GetCommitSummary(commit string) (*CommitSummary, error) {
  	cmd := gitNoLFS("show", "-s",
  		`--format=%H|%h|%P|%ai|%ci|%ae|%an|%ce|%cn|%s`, commit)
  
  	out, err := cmd.CombinedOutput()
  	if err != nil {
  		return nil, fmt.Errorf("Failed to call git show: %v %v", err, string(out))
  	}
  
  	// At most 10 substrings so subject line is not split on anything
  	fields := strings.SplitN(string(out), "|", 10)
  	// Cope with the case where subject is blank
  	if len(fields) >= 9 {
  		ret := &CommitSummary{}
  		// Get SHAs from output, not commit input, so we can support symbolic refs
  		ret.Sha = fields[0]
  		ret.ShortSha = fields[1]
  		ret.Parents = strings.Split(fields[2], " ")
  		// %aD & %cD (RFC2822) matches Go's RFC1123Z format
  		ret.AuthorDate, _ = ParseGitDate(fields[3])
  		ret.CommitDate, _ = ParseGitDate(fields[4])
  		ret.AuthorEmail = fields[5]
  		ret.AuthorName = fields[6]
  		ret.CommitterEmail = fields[7]
  		ret.CommitterName = fields[8]
  		if len(fields) > 9 {
  			ret.Subject = strings.TrimRight(fields[9], "\n")
  		}
  		return ret, nil
  	} else {
  		msg := fmt.Sprintf("Unexpected output from git show: %v", string(out))
  		return nil, errors.New(msg)
  	}
  }
docs: // Get summary information about a commit