mirror of
https://github.com/vbatts/git-validation.git
synced 2025-06-04 02:52:28 +00:00
message_regexp: regular expression rule for messages
Fixes: #30 now you can add a regular expression to the rules to be run i.e. `git-validation -run "dco,message_regexp='^JIRA-[0-9]+ [A-Z].*$'"` Signed-off-by: Vincent Batts <vbatts@hashbangbash.com>
This commit is contained in:
parent
d9bf419b44
commit
00823a324b
8 changed files with 89 additions and 10 deletions
61
rules/messageregexp/rule.go
Normal file
61
rules/messageregexp/rule.go
Normal file
|
@ -0,0 +1,61 @@
|
|||
package messageregexp
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"regexp"
|
||||
"strings"
|
||||
|
||||
"github.com/vbatts/git-validation/git"
|
||||
"github.com/vbatts/git-validation/validate"
|
||||
)
|
||||
|
||||
func init() {
|
||||
validate.RegisterRule(RegexpRule)
|
||||
}
|
||||
|
||||
var (
|
||||
// RegexpRule for validating a user provided regex on the commit messages
|
||||
RegexpRule = validate.Rule{
|
||||
Name: "message_regexp",
|
||||
Description: "checks the commit message for a user provided regular expression",
|
||||
Run: ValidateMessageRegexp,
|
||||
Default: false, // only for users specifically calling it through -run ...
|
||||
}
|
||||
)
|
||||
|
||||
// ValidateMessageRegexp is the message regex func to run
|
||||
func ValidateMessageRegexp(r validate.Rule, c git.CommitEntry) (vr validate.Result) {
|
||||
if r.Value == "" {
|
||||
vr.Pass = true
|
||||
vr.Msg = "noop: message_regexp value is blank"
|
||||
return vr
|
||||
}
|
||||
|
||||
re := regexp.MustCompile(r.Value)
|
||||
vr.CommitEntry = c
|
||||
if len(strings.Split(c["parent"], " ")) > 1 {
|
||||
vr.Pass = true
|
||||
vr.Msg = "merge commits are not checked for message_regexp"
|
||||
return vr
|
||||
}
|
||||
|
||||
hasValid := false
|
||||
for _, line := range strings.Split(c["subject"], "\n") {
|
||||
if re.MatchString(line) {
|
||||
hasValid = true
|
||||
}
|
||||
}
|
||||
for _, line := range strings.Split(c["body"], "\n") {
|
||||
if re.MatchString(line) {
|
||||
hasValid = true
|
||||
}
|
||||
}
|
||||
if !hasValid {
|
||||
vr.Pass = false
|
||||
vr.Msg = fmt.Sprintf("commit message does not match %q", r.Value)
|
||||
} else {
|
||||
vr.Pass = true
|
||||
vr.Msg = fmt.Sprintf("commit message matches %q", r.Value)
|
||||
}
|
||||
return vr
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue