commitParents returns the parent commit SHAs of ref: zero for a root commit, one for an ordinary commit, and 2+ for a merge. It uses `rev-list --parents -n 1`, whose single line is " …" — the leading commit token is dropped, the rest are the parents. `rev-list` (unlike `re
(ctx context.Context, ref string)
| 533 | // looks like an option. An error yields nil so the caller treats it as "no |
| 534 | // unique base". |
| 535 | func (p *Provider) commitParents(ctx context.Context, ref string) []string { |
| 536 | out, err := p.runGit(ctx, "rev-list", "--parents", "-n", "1", "--end-of-options", ref) |
| 537 | if err != nil { |
| 538 | return nil |
| 539 | } |
| 540 | fields := strings.Fields(firstLine(out)) |
| 541 | if len(fields) <= 1 { |
| 542 | return nil // root commit (only the commit itself, no parents) or empty |
| 543 | } |
| 544 | return fields[1:] |
| 545 | } |
| 546 | |
| 547 | // firstLine returns the first non-empty trimmed line of git output, so a stray |
| 548 | // trailing newline or an unexpected second line never pollutes a resolved SHA. |
no test coverage detected