From dc282c7db73967f37fe970dddc4beee926c3227d Mon Sep 17 00:00:00 2001
From: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
Date: Tue, 18 Mar 2014 22:18:52 +0100
Subject: [PATCH] complain about multiple [ChangeLog] misuses

Change-Id: I223eaf32782b2c0d2de3a815e0968706bfff1bdb
Reviewed-by: Sergio Ahumada <sahumada@blackberry.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@digia.com>
---
 git-hooks/sanitize-commit | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/git-hooks/sanitize-commit b/git-hooks/sanitize-commit
index 79d6c89..1ce8bb1 100755
--- a/git-hooks/sanitize-commit
+++ b/git-hooks/sanitize-commit
@@ -100,6 +100,7 @@ my $badurl = defined($cfg{url});
 my $badlog = defined($cfg{log});
 my $spell_check = !defined($cfg{spell});
 my $parents = 0;
+my ($inchangelog, $changelog) = (0, "");
 my ($footer, $cherry) = (0, 0);
 my ($badauthor, $badcommitter) = (0, 0);
 my ($revert1, $revert2, $nonrevert) = (0, 0, 0);
@@ -204,6 +205,7 @@ while (<MSG>) {
             }
         } elsif ($_ eq "") {
             $cherry = 0;
+            $inchangelog = 0;
             # Empty line following footer(s).
             $footer = 2 if ($footer == 1);
         } elsif ($cherry) {
@@ -233,6 +235,14 @@ while (<MSG>) {
                 $ftr = 1;
             } elsif (/^[A-Z][a-z]+(-[A-Za-z][a-z]+)+: /) {
                 $ftr = 1;
+            } elsif (/^\[change-?log\]/i) {
+                $inchangelog = 1;
+            }
+            if ($inchangelog) {
+                if (($ftr || $footer == 1) && !defined($cfg{changelog})) {
+                    &complain("No empty line between ChangeLog and footers", "changelog");
+                }
+                $changelog .= "\n".$_;
             }
             if ($ftr) {
                 if ($footer == 0) {
@@ -276,6 +286,12 @@ if ($badsign) {
 if ($footer == 3 && !defined($cfg{footer})) {
     &complain("Empty lines between footers", "footer");
 }
+if (length($changelog) && !defined($cfg{changelog})) {
+    &complain("Bad form of [ChangeLog] tag", "changelog") if ($changelog !~ /^\n\[ChangeLog\]/s);
+    &complain("Missing space between ChangeLog tags and text", "changelog") if ($changelog !~ /\]\s[^\[]/s);
+    &complain("JIRA task referenced from ChangeLog", "changelog") if ($changelog =~ /\[QT[A-Z]+-\d+\]/s);
+    &complain("Current repository referenced from ChangeLog", "changelog") if ($changelog =~ /\[$repo\]/si);
+}
 
 {
     local $file = 'log message';
-- 
GitLab