Add lint check to suggest 'Bug: issue NNNN' Change-Id: Ief0eb484d89752f3e9fa111754fd93759b20a448
diff --git a/lint/lint.go b/lint/lint.go index 0d48050..01a760b 100644 --- a/lint/lint.go +++ b/lint/lint.go
@@ -22,6 +22,7 @@ "errors" "fmt" "log" + "regexp" "strings" "gwt.googlesource.com/buildglue.git/checkstyle" @@ -143,6 +144,9 @@ return nil } +var fixesIssueRegexp = regexp.MustCompile("(?i)^fixes issue [0-9]{3,}[.]?$") +var issueRegexp = regexp.MustCompile("(?i)issue [0-9]{3,}") + func (l *linter) checkMessage(commitmsg []string) { warn := func(line int, message string) { // Gerrit includes some extra header lines before the commit message. @@ -150,12 +154,30 @@ l.comment("/COMMIT_MSG", line+6, "warning", message) } + lengthWarning := false + bugWarning := false + if len(commitmsg) >= 3 && len(commitmsg[1]) > 0 { warn(2, "Subject line and body should be separated by a blank line.") } for i, line := range commitmsg { - if i != 1 && len(line) > 72 { + if !lengthWarning && i != 1 && len(line) > 72 { warn(i+1, "Commit message lines should be 72 characters or fewer.") + lengthWarning = true + } + if !bugWarning && ((i == 0 && issueRegexp.MatchString(line)) || fixesIssueRegexp.MatchString(line)) { + warn(i+1, "Please use 'Bug: issue NNNN' and place it just above the Change-Id line.") + bugWarning = true + } + } + + for i := len(commitmsg) - 1; i >= 0 && len(commitmsg[i]) > 0; i-- { + if commitmsg[i][0] == ' ' { + continue + } + field := strings.TrimSpace(strings.Split(commitmsg[i], ":")[0]) + if field != strings.Title(field) { + warn(i+1, "Footer fields should be in Title-Case.") break } }
diff --git a/lint/lint_test.go b/lint/lint_test.go index d3ad33a..515a39a 100644 --- a/lint/lint_test.go +++ b/lint/lint_test.go
@@ -71,6 +71,48 @@ }, }, }, + { + message: []string{ + "Subject line", + "", + "Fixes issue 3171", + "", + "Change-Id: blah2", + }, + warnings: []gerrit.Comment{ + gerrit.Comment{ + Line: 9, + Message: "[warning] Please use 'Bug: issue NNNN' and place it just above the Change-Id line.", + }, + }, + }, + { + message: []string{ + "ISSUE 712 - change some stuff", + "", + "Change-Id: blah2", + }, + warnings: []gerrit.Comment{ + gerrit.Comment{ + Line: 7, + Message: "[warning] Please use 'Bug: issue NNNN' and place it just above the Change-Id line.", + }, + }, + }, + { + message: []string{ + "Subject line", + "", + "bug: issue 88", + "Change-Id: blah2", + }, + warnings: []gerrit.Comment{ + gerrit.Comment{ + Line: 9, + Message: "[warning] Footer fields should be in Title-Case.", + }, + }, + }, } for _, test := range tests {