Merge pull request #22 from git-chglog/feat/add-preview-style-link

Add URL of output example for template style
This commit is contained in:
tsuyoshi wada 2018-05-06 14:41:41 +09:00 committed by GitHub
commit 55dbf00339
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 129 additions and 83 deletions

View file

@ -21,8 +21,9 @@ func NewConfigBuilder() ConfigBuilder {
func (*configBuilderImpl) Build(ans *Answer) (string, error) {
var msgFormat *CommitMessageFormat
for _, f := range formats {
if f.Display == ans.CommitMessageFormat {
for _, ff := range formats {
f, _ := ff.(*CommitMessageFormat)
if f.display == ans.CommitMessageFormat {
msgFormat = f
break
}
@ -65,7 +66,7 @@ options:
ans.Style,
defaultTemplateFilename,
repoURL,
msgFormat.Pattern,
msgFormat.pattern,
msgFormat.PatternMapString(),
)

View file

@ -14,21 +14,21 @@ func TestConfigBulider(t *testing.T) {
out, err := builder.Build(&Answer{
RepositoryURL: "https://github.com/git-chglog/git-chglog/git-chglog/",
Style: styleNone,
CommitMessageFormat: fmtGitBasic.Display,
Template: tplStandard,
CommitMessageFormat: fmtGitBasic.display,
Template: tplStandard.display,
})
assert.Nil(err)
assert.Contains(out, "style: none")
assert.Contains(out, "template: CHANGELOG.tpl.md")
assert.Contains(out, " repository_url: https://github.com/git-chglog/git-chglog/git-chglog")
assert.Contains(out, fmt.Sprintf(" pattern: \"%s\"", fmtGitBasic.Pattern))
assert.Contains(out, fmt.Sprintf(" pattern: \"%s\"", fmtGitBasic.pattern))
assert.Contains(out, fmt.Sprintf(
` pattern_maps:
- %s
- %s`,
fmtGitBasic.PatternMaps[0],
fmtGitBasic.PatternMaps[1],
fmtGitBasic.patternMaps[0],
fmtGitBasic.patternMaps[1],
))
}
@ -39,8 +39,8 @@ func TestConfigBuliderEmptyRepoURL(t *testing.T) {
out, err := builder.Build(&Answer{
RepositoryURL: "",
Style: styleNone,
CommitMessageFormat: fmtGitBasic.Display,
Template: tplStandard,
CommitMessageFormat: fmtGitBasic.display,
Template: tplStandard.display,
})
assert.Nil(err)
@ -55,7 +55,7 @@ func TestConfigBuliderInvalidFormat(t *testing.T) {
RepositoryURL: "",
Style: styleNone,
CommitMessageFormat: "",
Template: tplStandard,
Template: tplStandard.display,
})
assert.Contains(err.Error(), "invalid commit message format")

View file

@ -58,13 +58,13 @@ func (*customTemplateBuilderImpl) versionHeader(style, template string) string {
// format
switch template {
case tplStandard:
case tplStandard.display:
tpl = fmt.Sprintf("%s## %s (%s)\n\n",
tpl,
tagName,
date,
)
case tplCool:
case tplCool.display:
tpl = fmt.Sprintf("%s## %s\n\n> %s\n\n",
tpl,
tagName,
@ -82,13 +82,13 @@ func (*customTemplateBuilderImpl) commits(template, format string) string {
)
switch format {
case fmtSubject.Display:
case fmtSubject.display:
body = `{{ range .Commits -}}
* {{ .Header }}
{{ end }}`
default:
if format == fmtTypeScopeSubject.Display {
if format == fmtTypeScopeSubject.display {
header = "{{ if .Scope }}**{{ .Scope }}:** {{ end }}{{ .Subject }}"
} else {
header = "{{ .Subject }}"

View file

@ -12,8 +12,8 @@ func TestCustomTemplateBuilderDefault(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleGitHub,
CommitMessageFormat: fmtTypeScopeSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtTypeScopeSubject.display,
Template: tplStandard.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -65,8 +65,8 @@ func TestCustomTemplateBuilderNone(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeScopeSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtTypeScopeSubject.display,
Template: tplStandard.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -117,8 +117,8 @@ func TestCustomTemplateBuilderSubjectOnly(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtSubject.display,
Template: tplStandard.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -167,8 +167,8 @@ func TestCustomTemplateBuilderSubject(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtTypeSubject.display,
Template: tplStandard.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -219,8 +219,8 @@ func TestCustomTemplateBuilderIgnoreReverts(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtTypeSubject.display,
Template: tplStandard.display,
IncludeMerges: true,
IncludeReverts: false,
})
@ -263,8 +263,8 @@ func TestCustomTemplateBuilderIgnoreMerges(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeSubject.Display,
Template: tplStandard,
CommitMessageFormat: fmtTypeSubject.display,
Template: tplStandard.display,
IncludeMerges: false,
IncludeReverts: true,
})
@ -307,8 +307,8 @@ func TestCustomTemplateBuilderCool(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeScopeSubject.Display,
Template: tplCool,
CommitMessageFormat: fmtTypeScopeSubject.display,
Template: tplCool.display,
IncludeMerges: true,
IncludeReverts: true,
})

View file

@ -88,7 +88,7 @@ func (t *kacTemplateBuilderImpl) commits(commitGroups, format string) string {
)
switch format {
case fmtSubject.Display:
case fmtSubject.display:
body = `{{ range .Commits -}}
- {{ .Header }}
{{ end }}`

View file

@ -12,8 +12,8 @@ func TestKACTemplateBuilderDefault(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleGitHub,
CommitMessageFormat: fmtTypeScopeSubject.Display,
Template: tplKeepAChangelog,
CommitMessageFormat: fmtTypeScopeSubject.display,
Template: tplKeepAChangelog.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -83,8 +83,8 @@ func TestKACTemplateBuilderNone(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtTypeScopeSubject.Display,
Template: tplKeepAChangelog,
CommitMessageFormat: fmtTypeScopeSubject.display,
Template: tplKeepAChangelog.display,
IncludeMerges: true,
IncludeReverts: true,
})
@ -143,8 +143,8 @@ func TestKACTemplateBuilderSubject(t *testing.T) {
out, err := builder.Build(&Answer{
Style: styleNone,
CommitMessageFormat: fmtSubject.Display,
Template: tplKeepAChangelog,
CommitMessageFormat: fmtSubject.display,
Template: tplKeepAChangelog.display,
IncludeMerges: true,
IncludeReverts: true,
})

View file

@ -77,7 +77,15 @@ func (q *questionerImpl) Ask() (*Answer, error) {
func (q *questionerImpl) ask() (*Answer, error) {
ans := &Answer{}
fmts := q.getFormats()
fmts := q.getPreviewableList(formats)
tpls := q.getPreviewableList(templates)
var previewableTransform = func(ans interface{}) (newAns interface{}) {
if s, ok := ans.(string); ok {
newAns = q.parsePreviewableList(s)
}
return
}
questions := []*survey.Question{
{
@ -102,20 +110,16 @@ func (q *questionerImpl) ask() (*Answer, error) {
Options: fmts,
Default: fmts[0],
},
Transform: func(ans interface{}) (newAns interface{}) {
if s, ok := ans.(string); ok {
newAns = q.parseFormat(s)
}
return
},
Transform: previewableTransform,
},
{
Name: "template",
Prompt: &survey.Select{
Message: "What is your favorite template style?",
Options: templates,
Default: templates[0],
Options: tpls,
Default: tpls[0],
},
Transform: previewableTransform,
},
{
Name: "include_merges",
@ -148,29 +152,29 @@ func (q *questionerImpl) ask() (*Answer, error) {
return ans, nil
}
func (*questionerImpl) getFormats() []string {
arr := make([]string, len(formats))
func (*questionerImpl) getPreviewableList(list []Previewable) []string {
arr := make([]string, len(list))
max := 0
for _, f := range formats {
l := len(f.Display)
for _, p := range list {
l := len(p.Display())
if max < l {
max = l
}
}
for i, f := range formats {
for i, p := range list {
arr[i] = fmt.Sprintf(
"%s -- %s",
f.Display+strings.Repeat(" ", max-len(f.Display)),
f.Preview,
p.Display()+strings.Repeat(" ", max-len(p.Display())),
p.Preview(),
)
}
return arr
}
func (*questionerImpl) parseFormat(input string) string {
func (*questionerImpl) parsePreviewableList(input string) string {
return strings.TrimSpace(strings.Split(input, "--")[0])
}

View file

@ -12,7 +12,7 @@ type TemplateBuilderFactory = func(string) TemplateBuilder
func templateBuilderFactory(template string) TemplateBuilder {
switch template {
case tplKeepAChangelog:
case tplKeepAChangelog.display:
return NewKACTemplateBuilder()
default:
return NewCustomTemplateBuilder()

View file

@ -5,6 +5,12 @@ import (
"strings"
)
// Previewable ...
type Previewable interface {
Display() string
Preview() string
}
// Defaults
var (
defaultConfigDir = ".chglog"
@ -28,22 +34,32 @@ var (
// CommitMessageFormat ...
type CommitMessageFormat struct {
Preview string
Display string
Pattern string
PatternMaps []string
display string
preview string
pattern string
patternMaps []string
}
// Display ...
func (f *CommitMessageFormat) Display() string {
return f.display
}
// Preview ...
func (f *CommitMessageFormat) Preview() string {
return f.preview
}
// PatternMapString ...
func (f *CommitMessageFormat) PatternMapString() string {
s := " []"
l := len(f.PatternMaps)
l := len(f.patternMaps)
if l == 0 {
return s
}
arr := make([]string, l)
for i, p := range f.PatternMaps {
for i, p := range f.patternMaps {
arr[i] = fmt.Sprintf(
"%s- %s",
strings.Repeat(" ", 6),
@ -57,30 +73,30 @@ func (f *CommitMessageFormat) PatternMapString() string {
// Formats
var (
fmtTypeScopeSubject = &CommitMessageFormat{
Preview: "feat(core): Add new feature",
Display: "<type>(<scope>): <subject>",
Pattern: `^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$`,
PatternMaps: []string{"Type", "Scope", "Subject"},
display: "<type>(<scope>): <subject>",
preview: "feat(core): Add new feature",
pattern: `^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$`,
patternMaps: []string{"Type", "Scope", "Subject"},
}
fmtTypeSubject = &CommitMessageFormat{
Preview: "feat: Add new feature",
Display: "<type>: <subject>",
Pattern: `^(\\w*)\\:\\s(.*)$`,
PatternMaps: []string{"Type", "Subject"},
display: "<type>: <subject>",
preview: "feat: Add new feature",
pattern: `^(\\w*)\\:\\s(.*)$`,
patternMaps: []string{"Type", "Subject"},
}
fmtGitBasic = &CommitMessageFormat{
Preview: "Add new feature",
Display: "<<type> subject>",
Pattern: `^((\\w+)\\s.*)$`,
PatternMaps: []string{"Subject", "Type"},
display: "<<type> subject>",
preview: "Add new feature",
pattern: `^((\\w+)\\s.*)$`,
patternMaps: []string{"Subject", "Type"},
}
fmtSubject = &CommitMessageFormat{
Preview: "Add new feature (Not detect `type` field)",
Display: "<subject>",
Pattern: `^(.*)$`,
PatternMaps: []string{"Subject"},
display: "<subject>",
preview: "Add new feature (Not detect `type` field)",
pattern: `^(.*)$`,
patternMaps: []string{"Subject"},
}
formats = []*CommitMessageFormat{
formats = []Previewable{
fmtTypeScopeSubject,
fmtTypeSubject,
fmtGitBasic,
@ -88,12 +104,37 @@ var (
}
)
// TemplateStyleFormat ...
type TemplateStyleFormat struct {
preview string
display string
}
// Display ...
func (t *TemplateStyleFormat) Display() string {
return t.display
}
// Preview ...
func (t *TemplateStyleFormat) Preview() string {
return t.preview
}
// Templates
var (
tplKeepAChangelog = "keep-a-changelog"
tplStandard = "standard"
tplCool = "cool"
templates = []string{
tplKeepAChangelog = &TemplateStyleFormat{
display: "keep-a-changelog",
preview: "https://github.com/git-chglog/example-type-scope-subject/blob/master/CHANGELOG.kac.md",
}
tplStandard = &TemplateStyleFormat{
display: "standard",
preview: "https://github.com/git-chglog/example-type-scope-subject/blob/master/CHANGELOG.standard.md",
}
tplCool = &TemplateStyleFormat{
display: "cool",
preview: "https://github.com/git-chglog/example-type-scope-subject/blob/master/CHANGELOG.cool.md",
}
templates = []Previewable{
tplKeepAChangelog,
tplStandard,
tplCool,

View file

@ -10,7 +10,7 @@ func TestCommitMessageFormatPatternMaps(t *testing.T) {
assert := assert.New(t)
f := &CommitMessageFormat{
PatternMaps: []string{
patternMaps: []string{
"Type",
"Scope",
"Subject",
@ -23,7 +23,7 @@ func TestCommitMessageFormatPatternMaps(t *testing.T) {
- Subject`, f.PatternMapString())
f = &CommitMessageFormat{
PatternMaps: []string{},
patternMaps: []string{},
}
assert.Equal(" []", f.PatternMapString())