Allow threshold of too long lines to be configured Currently the plugin will only reject the commit if 33% or more of the commit message's lines are longer than the limit. Add a configuration parameter to allow the administrator to set this threshold. If not specified, it defaults to 33, the same as it is now. Change-Id: Ic1f07ba1f27a7837a59d215ca943663cb85a12ff
diff --git a/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java b/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java index 5bba706..270c5a4 100644 --- a/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java +++ b/src/main/java/com/googlesource/gerrit/plugins/validators/CommitMessageLengthValidation.java
@@ -36,15 +36,18 @@ public class CommitMessageLengthValidation implements CommitValidationListener { private final static int DEFAULT_MAX_SUBJECT_LENGTH = 65; private final static int DEFAULT_MAX_LINE_LENGTH = 70; + private final static int DEFAULT_LONG_LINES_THRESHOLD = 33; private final static boolean DEFAULT_REJECT_TOO_LONG = false; private final static String COMMIT_MESSAGE_SECTION = "commitmessage"; private final static String MAX_SUBJECT_LENGTH_KEY = "maxSubjectLength"; private final static String MAX_LINE_LENGTH_KEY = "maxLineLength"; private final static String REJECT_TOO_LONG_KEY = "rejectTooLong"; + private final static String LONG_LINES_THRESHOLD_KEY = "longLinesThreshold"; private final Config config; private final int maxSubjectLength; private final int maxLineLength; + private final int longLinesThreshold; private boolean rejectTooLong; @Inject @@ -60,6 +63,9 @@ this.rejectTooLong = config.getBoolean( COMMIT_MESSAGE_SECTION, REJECT_TOO_LONG_KEY, DEFAULT_REJECT_TOO_LONG); + this.longLinesThreshold = config.getInt( + COMMIT_MESSAGE_SECTION, null, + LONG_LINES_THRESHOLD_KEY, DEFAULT_LONG_LINES_THRESHOLD); } private void onLineTooLong(final AbbreviatedObjectId id, @@ -97,9 +103,10 @@ } } - if (0 < longLineCnt && 33 < longLineCnt * 100 / nonEmptyCnt) { + if (longLineCnt > (longLinesThreshold * nonEmptyCnt) / 100) { onLineTooLong(id, messages, - new String("commit message lines >" + this.maxLineLength + new String("too many commit message lines longer than " + + this.maxLineLength + " characters; manually wrap lines")); }
diff --git a/src/main/resources/Documentation/config.md b/src/main/resources/Documentation/config.md index 92440e7..0bf0c9b 100644 --- a/src/main/resources/Documentation/config.md +++ b/src/main/resources/Documentation/config.md
@@ -12,6 +12,11 @@ : Maximum length of a line in the commit message's body. If not specified, defaults to 70. +commitmessage.longLinesThreshold +: Percentage of commit message lines allowed to exceed the + maximum length before a warning or error is generated. If + not specified, defaults to 33. + commitmessage.rejectTooLong : If set to `true`, reject commits whose subject or line length exceeds the maximum allowed length. If not