mirror of
https://github.com/thegeeklab/git-sv.git
synced 2024-11-21 22:10:39 +00:00
Merge pull request #89 from bvieira/#85
Feature: remove carriage return from commit body
This commit is contained in:
commit
4fec01e9b5
14
.github/workflows/ci.yml
vendored
14
.github/workflows/ci.yml
vendored
@ -15,9 +15,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
- name: Run golangci lint
|
- name: Run golangci lint
|
||||||
uses: golangci/golangci-lint-action@v2
|
uses: golangci/golangci-lint-action@v3
|
||||||
with:
|
with:
|
||||||
version: latest
|
version: latest
|
||||||
|
|
||||||
@ -26,9 +26,9 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v3
|
||||||
with:
|
with:
|
||||||
go-version: ^1.19
|
go-version: ^1.19
|
||||||
- name: Build
|
- name: Build
|
||||||
@ -40,7 +40,7 @@ jobs:
|
|||||||
needs: [lint, build]
|
needs: [lint, build]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -70,7 +70,7 @@ jobs:
|
|||||||
needs: [tag]
|
needs: [tag]
|
||||||
steps:
|
steps:
|
||||||
- name: Check out code
|
- name: Check out code
|
||||||
uses: actions/checkout@v2
|
uses: actions/checkout@v3
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
|
|
||||||
@ -81,7 +81,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Set up Go
|
- name: Set up Go
|
||||||
id: go
|
id: go
|
||||||
uses: actions/setup-go@v2
|
uses: actions/setup-go@v3
|
||||||
with:
|
with:
|
||||||
go-version: ^1.19
|
go-version: ^1.19
|
||||||
|
|
||||||
|
@ -83,7 +83,7 @@ func (p MessageProcessorImpl) Validate(message string) error {
|
|||||||
subject, body := splitCommitMessageContent(message)
|
subject, body := splitCommitMessageContent(message)
|
||||||
msg, parseErr := p.Parse(subject, body)
|
msg, parseErr := p.Parse(subject, body)
|
||||||
|
|
||||||
if (parseErr != nil) {
|
if parseErr != nil {
|
||||||
return parseErr
|
return parseErr
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -205,14 +205,19 @@ func (p MessageProcessorImpl) Format(msg CommitMessage) (string, string, string)
|
|||||||
return header.String(), msg.Body, footer.String()
|
return header.String(), msg.Body, footer.String()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func removeCarriage(commit string) string {
|
||||||
|
return regexp.MustCompile(`\r`).ReplaceAllString(commit, "")
|
||||||
|
}
|
||||||
|
|
||||||
// Parse a commit message.
|
// Parse a commit message.
|
||||||
func (p MessageProcessorImpl) Parse(subject, body string) (CommitMessage, error) {
|
func (p MessageProcessorImpl) Parse(subject, body string) (CommitMessage, error) {
|
||||||
preparedSubject, err := p.prepareHeader(subject)
|
preparedSubject, err := p.prepareHeader(subject)
|
||||||
|
commitBody := removeCarriage(body)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return CommitMessage{}, err
|
return CommitMessage{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
commitType, scope, description, hasBreakingChange := parseSubjectMessage(preparedSubject)
|
commitType, scope, description, hasBreakingChange := parseSubjectMessage(preparedSubject)
|
||||||
|
|
||||||
metadata := make(map[string]string)
|
metadata := make(map[string]string)
|
||||||
@ -220,14 +225,14 @@ func (p MessageProcessorImpl) Parse(subject, body string) (CommitMessage, error)
|
|||||||
if mdCfg.Key != "" {
|
if mdCfg.Key != "" {
|
||||||
prefixes := append([]string{mdCfg.Key}, mdCfg.KeySynonyms...)
|
prefixes := append([]string{mdCfg.Key}, mdCfg.KeySynonyms...)
|
||||||
for _, prefix := range prefixes {
|
for _, prefix := range prefixes {
|
||||||
if tagValue := extractFooterMetadata(prefix, body, mdCfg.UseHash); tagValue != "" {
|
if tagValue := extractFooterMetadata(prefix, commitBody, mdCfg.UseHash); tagValue != "" {
|
||||||
metadata[key] = tagValue
|
metadata[key] = tagValue
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if tagValue := extractFooterMetadata(breakingChangeFooterKey, body, false); tagValue != "" {
|
if tagValue := extractFooterMetadata(breakingChangeFooterKey, commitBody, false); tagValue != "" {
|
||||||
metadata[breakingChangeMetadataKey] = tagValue
|
metadata[breakingChangeMetadataKey] = tagValue
|
||||||
hasBreakingChange = true
|
hasBreakingChange = true
|
||||||
}
|
}
|
||||||
@ -236,7 +241,7 @@ func (p MessageProcessorImpl) Parse(subject, body string) (CommitMessage, error)
|
|||||||
Type: commitType,
|
Type: commitType,
|
||||||
Scope: scope,
|
Scope: scope,
|
||||||
Description: description,
|
Description: description,
|
||||||
Body: body,
|
Body: commitBody,
|
||||||
IsBreakingChange: hasBreakingChange,
|
IsBreakingChange: hasBreakingChange,
|
||||||
Metadata: metadata,
|
Metadata: metadata,
|
||||||
}, nil
|
}, nil
|
||||||
|
@ -70,7 +70,7 @@ func newCommitMessageCfg(headerSelector string) CommitMessageConfig {
|
|||||||
"issue": {Key: "jira", KeySynonyms: []string{"Jira"}},
|
"issue": {Key: "jira", KeySynonyms: []string{"Jira"}},
|
||||||
"refs": {Key: "Refs", UseHash: true},
|
"refs": {Key: "Refs", UseHash: true},
|
||||||
},
|
},
|
||||||
Issue: CommitMessageIssueConfig{Regex: "[A-Z]+-[0-9]+"},
|
Issue: CommitMessageIssueConfig{Regex: "[A-Z]+-[0-9]+"},
|
||||||
HeaderSelector: headerSelector,
|
HeaderSelector: headerSelector,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -378,6 +378,9 @@ var completeBody = `some descriptions
|
|||||||
jira: JIRA-123
|
jira: JIRA-123
|
||||||
BREAKING CHANGE: this change breaks everything`
|
BREAKING CHANGE: this change breaks everything`
|
||||||
|
|
||||||
|
var bodyWithCarriage = "some description\r\nmore description\r\n\r\njira: JIRA-123\r"
|
||||||
|
var expectedBodyWithCarriage = "some description\nmore description\n\njira: JIRA-123"
|
||||||
|
|
||||||
var issueOnlyBody = `some descriptions
|
var issueOnlyBody = `some descriptions
|
||||||
|
|
||||||
jira: JIRA-456`
|
jira: JIRA-456`
|
||||||
@ -408,11 +411,12 @@ func TestMessageProcessorImpl_Parse(t *testing.T) {
|
|||||||
{"breaking change with exclamation mark", ccfg, "feat!: something new", "", CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: "", IsBreakingChange: true, Metadata: map[string]string{}}},
|
{"breaking change with exclamation mark", ccfg, "feat!: something new", "", CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: "", IsBreakingChange: true, Metadata: map[string]string{}}},
|
||||||
{"hash metadata", ccfg, "feat: something new", hashMetadataBody, CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: hashMetadataBody, IsBreakingChange: false, Metadata: map[string]string{issueMetadataKey: "JIRA-999", "refs": "#123"}}},
|
{"hash metadata", ccfg, "feat: something new", hashMetadataBody, CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: hashMetadataBody, IsBreakingChange: false, Metadata: map[string]string{issueMetadataKey: "JIRA-999", "refs": "#123"}}},
|
||||||
{"empty issue cfg", ccfgEmptyIssue, "feat: something new", hashMetadataBody, CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: hashMetadataBody, IsBreakingChange: false, Metadata: map[string]string{}}},
|
{"empty issue cfg", ccfgEmptyIssue, "feat: something new", hashMetadataBody, CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: hashMetadataBody, IsBreakingChange: false, Metadata: map[string]string{}}},
|
||||||
|
{"carriage return on body", ccfg, "feat: something new", bodyWithCarriage, CommitMessage{Type: "feat", Scope: "", Description: "something new", Body: expectedBodyWithCarriage, IsBreakingChange: false, Metadata: map[string]string{issueMetadataKey: "JIRA-123"}}},
|
||||||
}
|
}
|
||||||
for _, tt := range tests {
|
for _, tt := range tests {
|
||||||
t.Run(tt.name, func(t *testing.T) {
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
if got, err := NewMessageProcessor(tt.cfg, newBranchCfg(false)).Parse(tt.subject, tt.body); !reflect.DeepEqual(got, tt.want) && err == nil {
|
if got, err := NewMessageProcessor(tt.cfg, newBranchCfg(false)).Parse(tt.subject, tt.body); !reflect.DeepEqual(got, tt.want) && err == nil {
|
||||||
t.Errorf("MessageProcessorImpl.Parse() = %v, want %v", got, tt.want)
|
t.Errorf("MessageProcessorImpl.Parse() = [%+v], want [%+v]", got, tt.want)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -522,11 +526,11 @@ func Test_parseSubjectMessage(t *testing.T) {
|
|||||||
|
|
||||||
func Test_prepareHeader(t *testing.T) {
|
func Test_prepareHeader(t *testing.T) {
|
||||||
tests := []struct {
|
tests := []struct {
|
||||||
name string
|
name string
|
||||||
headerSelector string
|
headerSelector string
|
||||||
commitHeader string
|
commitHeader string
|
||||||
wantHeader string
|
wantHeader string
|
||||||
wantError bool
|
wantError bool
|
||||||
}{
|
}{
|
||||||
{"conventional without selector", "", "feat: something", "feat: something", false},
|
{"conventional without selector", "", "feat: something", "feat: something", false},
|
||||||
{"conventional with scope without selector", "", "feat(scope): something", "feat(scope): something", false},
|
{"conventional with scope without selector", "", "feat(scope): something", "feat(scope): something", false},
|
||||||
@ -551,3 +555,22 @@ func Test_prepareHeader(t *testing.T) {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_removeCarriage(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
commit string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{"normal string", "normal string", "normal string"},
|
||||||
|
{"break line", "normal\nstring", "normal\nstring"},
|
||||||
|
{"carriage return", "normal\r\nstring", "normal\nstring"},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
if got := removeCarriage(tt.commit); got != tt.want {
|
||||||
|
t.Errorf("removeCarriage() = %v, want %v", got, tt.want)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user