| 617 | } |
| 618 | |
| 619 | func changelogForRange(client *git.Client, refRange string) ([]logEntry, error) { |
| 620 | cmd, err := client.Command(context.Background(), "-c", "log.ShowSignature=false", "log", "--first-parent", "--reverse", "--pretty=format:%B%x00", refRange) |
| 621 | if err != nil { |
| 622 | return nil, err |
| 623 | } |
| 624 | b, err := cmd.Output() |
| 625 | if err != nil { |
| 626 | return nil, err |
| 627 | } |
| 628 | |
| 629 | var entries []logEntry |
| 630 | for _, cb := range bytes.Split(b, []byte{'\000'}) { |
| 631 | c := strings.ReplaceAll(string(cb), "\r\n", "\n") |
| 632 | c = strings.TrimPrefix(c, "\n") |
| 633 | if len(c) == 0 { |
| 634 | continue |
| 635 | } |
| 636 | parts := strings.SplitN(c, "\n\n", 2) |
| 637 | var body string |
| 638 | subject := strings.ReplaceAll(parts[0], "\n", " ") |
| 639 | if len(parts) > 1 { |
| 640 | body = parts[1] |
| 641 | } |
| 642 | entries = append(entries, logEntry{ |
| 643 | Subject: subject, |
| 644 | Body: body, |
| 645 | }) |
| 646 | } |
| 647 | |
| 648 | return entries, nil |
| 649 | } |
| 650 | |
| 651 | func generateChangelog(commits []logEntry) string { |
| 652 | var parts []string |