code: func (g *Git) Revisions(ctx context.Context, name string) ([]backend.Revision, error) {
  	args := []string{
  		"log",
  		`--format=%H%x1f%an%x1f%ae%x1f%at%x1f%s%x1f%b%x1e`,
  		"--",
  		name,
  	}
  	stdout, stderr, err := g.captureCmd(ctx, "Revisions", args...)
  	if err != nil {
  		out.Debug(ctx, "Command failed: %s", string(stderr))
  		return nil, err
  	}
  	so := string(stdout)
  	revs := make([]backend.Revision, 0, strings.Count(so, "\x1e"))
  	for _, rev := range strings.Split(so, "\x1e") {
  		rev = strings.TrimSpace(rev)
  		if rev == "" {
  			continue
  		}
  
  		p := strings.Split(rev, "\x1f")
  		if len(p) < 1 {
  			continue
  		}
  
  		r := backend.Revision{}
  		r.Hash = p[0]
  		if len(p) > 1 {
  			r.AuthorName = p[1]
  		}
  		if len(p) > 2 {
  			r.AuthorEmail = p[2]
  		}
  		if len(p) > 3 {
  			if iv, err := strconv.ParseInt(p[3], 10, 64); err == nil {
  				r.Date = time.Unix(iv, 0)
  			}
  		}
  		if len(p) > 4 {
  			r.Subject = p[4]
  		}
  		if len(p) > 5 {
  			r.Body = p[5]
  		}
  		revs = append(revs, r)
  	}
  	return revs, nil
  }
docs: // Revisions will list all available revisions of the named entity
  // see http://blog.lost-theory.org/post/how-to-parse-git-log-output/
  // and https://git-scm.com/docs/git-log#_pretty_formats