mirror of
https://github.com/git-chglog/git-chglog.git
synced 2026-01-23 02:15:12 +00:00
136 lines
2.4 KiB
Go
136 lines
2.4 KiB
Go
package main
|
|
|
|
import "fmt"
|
|
|
|
type customTemplateBuilderImpl struct{}
|
|
|
|
// NewCustomTemplateBuilder ...
|
|
func NewCustomTemplateBuilder() TemplateBuilder {
|
|
return &customTemplateBuilderImpl{}
|
|
}
|
|
|
|
// Build ...
|
|
func (t *customTemplateBuilderImpl) Build(ans *Answer) (string, error) {
|
|
// versions
|
|
tpl := "{{range .Versions}}\n"
|
|
|
|
// version header
|
|
tpl += t.versionHeader(ans.Style, ans.Template)
|
|
|
|
// commits
|
|
tpl += t.commits(ans.Template, 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 += "\n{{end}}"
|
|
|
|
return tpl, nil
|
|
}
|
|
|
|
func (*customTemplateBuilderImpl) versionHeader(style, template string) string {
|
|
var (
|
|
tpl string
|
|
tagName = "{{.Tag.Name}}"
|
|
date = "{{datetime \"2006-01-02\" .Tag.Date}}"
|
|
)
|
|
|
|
// parts
|
|
switch style {
|
|
case styleGitHub:
|
|
tpl = "<a name=\"{{.Tag.Name}}\"></a>\n"
|
|
tagName = "{{if .Tag.Previous}}[{{.Tag.Name}}]({{$.Info.RepositoryURL}}/compare/{{.Tag.Previous.Name}}...{{.Tag.Name}}){{else}}{{.Tag.Name}}{{end}}"
|
|
}
|
|
|
|
// format
|
|
switch template {
|
|
case tplStandard:
|
|
tpl = fmt.Sprintf("%s## %s (%s)\n",
|
|
tpl,
|
|
tagName,
|
|
date,
|
|
)
|
|
case tplCool:
|
|
tpl = fmt.Sprintf("%s## %s\n\n> %s\n",
|
|
tpl,
|
|
tagName,
|
|
date,
|
|
)
|
|
}
|
|
|
|
return tpl
|
|
}
|
|
|
|
func (*customTemplateBuilderImpl) commits(template, format string) string {
|
|
var (
|
|
header string
|
|
body string
|
|
)
|
|
|
|
switch format {
|
|
case fmtSubject.Display:
|
|
body = `{{range .Commits}}
|
|
* {{.Header}}{{end}}
|
|
`
|
|
|
|
default:
|
|
if format == fmtTypeScopeSubject.Display {
|
|
header = "{{if .Scope}}**{{.Scope}}:** {{end}}{{.Subject}}"
|
|
} else {
|
|
header = "{{.Subject}}"
|
|
}
|
|
|
|
body = fmt.Sprintf(`### {{.Title}}
|
|
{{range .Commits}}
|
|
* %s{{end}}
|
|
`, header)
|
|
}
|
|
|
|
return fmt.Sprintf(`{{range .CommitGroups}}
|
|
%s{{end}}`, body)
|
|
}
|
|
|
|
func (*customTemplateBuilderImpl) reverts() string {
|
|
return `{{if .RevertCommits}}
|
|
### Reverts
|
|
{{range .RevertCommits}}
|
|
* {{.Revert.Header}}{{end}}
|
|
{{end}}`
|
|
}
|
|
|
|
func (t *customTemplateBuilderImpl) 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 (*customTemplateBuilderImpl) notes() string {
|
|
return `{{range .NoteGroups}}
|
|
### {{.Title}}
|
|
{{range .Notes}}
|
|
{{.Body}}
|
|
{{end}}
|
|
{{end}}`
|
|
}
|