diff --git a/chglog.go b/chglog.go index 1e576385..d698d3e0 100644 --- a/chglog.go +++ b/chglog.go @@ -22,10 +22,8 @@ type Options struct { HeaderPatternMaps []string IssuePrefix []string RefActions []string - MergeNoteTitle string MergePattern string MergePatternMaps []string - RevertNoteTitle string RevertPattern string RevertPatternMaps []string NoteKeywords []string @@ -133,12 +131,14 @@ func (gen *Generator) readVersions(query string) ([]*Version, error) { return nil, err } - commitGroups, noteGroups := gen.commitExtractor.Extract(commits) + commitGroups, mergeCommits, revertCommits, noteGroups := gen.commitExtractor.Extract(commits) versions = append(versions, &Version{ - Tag: tag, - CommitGroups: commitGroups, - NoteGroups: noteGroups, + Tag: tag, + CommitGroups: commitGroups, + MergeCommits: mergeCommits, + RevertCommits: revertCommits, + NoteGroups: noteGroups, }) } diff --git a/commit_extractor.go b/commit_extractor.go index 2ba8c00d..b0cc6bcd 100644 --- a/commit_extractor.go +++ b/commit_extractor.go @@ -15,20 +15,38 @@ func newCommitExtractor(opts *Options) *commitExtractor { } } -func (e *commitExtractor) Extract(commits []*Commit) ([]*CommitGroup, []*NoteGroup) { - filteredCommits := commitFilter(commits, e.opts.CommitFilters) +func (e *commitExtractor) Extract(commits []*Commit) ([]*CommitGroup, []*Commit, []*Commit, []*NoteGroup) { commitGroups := []*CommitGroup{} noteGroups := []*NoteGroup{} + mergeCommits := []*Commit{} + revertCommits := []*Commit{} + + filteredCommits := commitFilter(commits, e.opts.CommitFilters) + + for _, commit := range commits { + if commit.Merge != nil { + mergeCommits = append(mergeCommits, commit) + continue + } + + if commit.Revert != nil { + revertCommits = append(revertCommits, commit) + continue + } + } for _, commit := range filteredCommits { - e.processCommitGroups(&commitGroups, commit) + if commit.Merge == nil && commit.Revert == nil { + e.processCommitGroups(&commitGroups, commit) + } + e.processNoteGroups(¬eGroups, commit) } e.sortCommitGroups(commitGroups) e.sortNoteGroups(noteGroups) - return commitGroups, noteGroups + return commitGroups, mergeCommits, revertCommits, noteGroups } func (e *commitExtractor) processCommitGroups(groups *[]*CommitGroup, commit *Commit) { @@ -56,22 +74,9 @@ func (e *commitExtractor) processCommitGroups(groups *[]*CommitGroup, commit *Co func (e *commitExtractor) processNoteGroups(groups *[]*NoteGroup, commit *Commit) { if len(commit.Notes) != 0 { - // notes for _, note := range commit.Notes { e.appendNoteToNoteGroups(groups, note) } - } else if commit.Merge != nil && e.opts.MergeNoteTitle != "" { - // merges - e.appendNoteToNoteGroups(groups, &Note{ - Title: e.opts.MergeNoteTitle, - Body: commit.Header, - }) - } else if commit.Revert != nil && e.opts.RevertNoteTitle != "" { - // reverts - e.appendNoteToNoteGroups(groups, &Note{ - Title: e.opts.RevertNoteTitle, - Body: commit.Header, - }) } } diff --git a/commit_extractor_test.go b/commit_extractor_test.go index a69a3599..6b42eea2 100644 --- a/commit_extractor_test.go +++ b/commit_extractor_test.go @@ -9,9 +9,6 @@ import ( func TestCommitExtractor(t *testing.T) { assert := assert.New(t) - mTitle := "Merges" - rTitle := "Reverts" - extractor := newCommitExtractor(&Options{ CommitSortBy: "Scope", CommitGroupBy: "Type", @@ -19,8 +16,6 @@ func TestCommitExtractor(t *testing.T) { CommitGroupTitleMaps: map[string]string{ "bar": "BAR", }, - MergeNoteTitle: mTitle, - RevertNoteTitle: rTitle, }) fixtures := []*Commit{ @@ -85,7 +80,7 @@ func TestCommitExtractor(t *testing.T) { }, } - commitGroups, noteGroups := extractor.Extract(fixtures) + commitGroups, mergeCommits, revertCommits, noteGroups := extractor.Extract(fixtures) assert.Equal([]*CommitGroup{ &CommitGroup{ @@ -106,13 +101,15 @@ func TestCommitExtractor(t *testing.T) { }, }, commitGroups) + assert.Equal([]*Commit{ + fixtures[4], + }, mergeCommits) + + assert.Equal([]*Commit{ + fixtures[5], + }, revertCommits) + assert.Equal([]*NoteGroup{ - &NoteGroup{ - Title: mTitle, - Notes: []*Note{ - {mTitle, fixtures[4].Header}, - }, - }, &NoteGroup{ Title: "note1-title", Notes: []*Note{ @@ -138,11 +135,5 @@ func TestCommitExtractor(t *testing.T) { fixtures[3].Notes[0], }, }, - &NoteGroup{ - Title: rTitle, - Notes: []*Note{ - {rTitle, fixtures[5].Header}, - }, - }, }, noteGroups) } diff --git a/fields.go b/fields.go index 0c40b535..08ea4dfb 100644 --- a/fields.go +++ b/fields.go @@ -86,7 +86,9 @@ type Tag struct { // Version ... type Version struct { - Tag *Tag - CommitGroups []*CommitGroup - NoteGroups []*NoteGroup + Tag *Tag + CommitGroups []*CommitGroup + MergeCommits []*Commit + RevertCommits []*Commit + NoteGroups []*NoteGroup }