mirror of
https://github.com/git-chglog/git-chglog.git
synced 2026-01-23 02:15:12 +00:00
118 lines
2.3 KiB
Go
118 lines
2.3 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type kacTemplateBuilderImpl struct{}
|
|
|
|
// NewKACTemplateBuilder ...
|
|
func NewKACTemplateBuilder() TemplateBuilder {
|
|
return &kacTemplateBuilderImpl{}
|
|
}
|
|
|
|
// Build ...
|
|
func (t *kacTemplateBuilderImpl) Build(ans *Answer) (string, error) {
|
|
// versions
|
|
tpl := "## {{if .Versions}}[Unreleased]{{end}}\n{{range .Versions}}\n"
|
|
tpl += t.versionHeader(ans.Style)
|
|
|
|
// commits
|
|
tpl += t.commits(ans.CommitMessageFormat)
|
|
|
|
// revert
|
|
if ans.IncludeReverts {
|
|
tpl += t.reverts()
|
|
}
|
|
|
|
// merges
|
|
if ans.IncludeMerges {
|
|
tpl += t.merges(ans.Style)
|
|
}
|
|
|
|
// notes
|
|
tpl += t.notes()
|
|
|
|
// versions end
|
|
tpl += "{{end}}"
|
|
|
|
// footer (links)
|
|
tpl += t.footer(ans.Style)
|
|
|
|
return tpl, nil
|
|
}
|
|
|
|
func (t *kacTemplateBuilderImpl) versionHeader(style string) string {
|
|
var (
|
|
tagName = "{{.Tag.Name}}"
|
|
date = "{{datetime \"2006-01-02\" .Tag.Date}}"
|
|
)
|
|
|
|
switch style {
|
|
case styleGitHub:
|
|
tagName = "{{if .Tag.Previous}}[{{.Tag.Name}}]{{else}}{{.Tag.Name}}{{end}}"
|
|
}
|
|
|
|
return fmt.Sprintf("## %s - %s", tagName, date)
|
|
}
|
|
|
|
func (t *kacTemplateBuilderImpl) commits(format string) string {
|
|
var (
|
|
body string
|
|
)
|
|
|
|
switch format {
|
|
case fmtSubject.Display:
|
|
body = `{{range .Commits}}
|
|
- {{.Header}}{{end}}`
|
|
|
|
default:
|
|
body = `### {{.Title}}{{range .Commits}}
|
|
- {{if .Scope}}**{{.Scope}}:** {{end}}{{.Subject}}{{end}}`
|
|
}
|
|
|
|
return fmt.Sprintf(`{{range .CommitGroups}}
|
|
%s
|
|
{{end}}`, body)
|
|
}
|
|
|
|
func (t *kacTemplateBuilderImpl) reverts() string {
|
|
return `{{if .RevertCommits}}
|
|
### Reverts{{range .RevertCommits}}
|
|
- {{.Revert.Header}}{{end}}
|
|
{{end}}`
|
|
}
|
|
|
|
func (t *kacTemplateBuilderImpl) merges(style string) string {
|
|
var title string
|
|
|
|
switch style {
|
|
case styleGitHub:
|
|
title = "Pull Requests"
|
|
default:
|
|
title = "Merges"
|
|
}
|
|
|
|
return fmt.Sprintf(`{{if .MergeCommits}}
|
|
### %s{{range .MergeCommits}}
|
|
- {{.Header}}{{end}}
|
|
{{end}}`, title)
|
|
}
|
|
|
|
func (*kacTemplateBuilderImpl) notes() string {
|
|
return `{{range .NoteGroups}}
|
|
### {{.Title}}
|
|
{{range .Notes}}
|
|
{{.Body}}
|
|
{{end}}
|
|
{{end}}`
|
|
}
|
|
|
|
func (*kacTemplateBuilderImpl) footer(style string) string {
|
|
if style != styleGitHub {
|
|
return ""
|
|
}
|
|
|
|
return `{{if .Versions}}
|
|
[Unreleased]: {{.Info.RepositoryURL}}/compare/{{$latest := index .Versions 0}}{{$latest.Tag.Name}}...HEAD{{range .Versions}}{{if .Tag.Previous}}
|
|
[{{.Tag.Name}}]: {{$.Info.RepositoryURL}}/compare/{{.Tag.Previous.Name}}...{{.Tag.Name}}{{end}}{{end}}
|
|
{{end}}`
|
|
}
|