From f646cd99e5f2181cbaef365d2f8262789a515e45 Mon Sep 17 00:00:00 2001
From: Paul Eggert <eggert@cs.ucla.edu>
Date: Sun, 28 Dec 2014 10:05:14 -0800
Subject: [PATCH] * build-aux/git-hooks/commit-msg: Allow tabs.

Treat them as if they were expanded to spaces, with tab stops
every 8 columns.
---
 ChangeLog                      |  6 ++++++
 build-aux/git-hooks/commit-msg | 16 ++++++++++------
 2 files changed, 16 insertions(+), 6 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b6d0fcbb92d..1b161abf11b 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2014-12-28  Paul Eggert  <eggert@cs.ucla.edu>
+
+	* build-aux/git-hooks/commit-msg: Allow tabs.
+	Treat them as if they were expanded to spaces, with tab stops
+	every 8 columns.
+
 2014-12-17  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* .gitignore: Ignore /conftest*.
diff --git a/build-aux/git-hooks/commit-msg b/build-aux/git-hooks/commit-msg
index 2e3e4f21cda..9b6179ee613 100755
--- a/build-aux/git-hooks/commit-msg
+++ b/build-aux/git-hooks/commit-msg
@@ -87,6 +87,15 @@ exec $awk '
     status = 1
   }
 
+  {
+    # Expand tabs to spaces for length calculations etc.
+    while (match($0, /\t/)) {
+      before_tab = substr($0, 1, RSTART - 1)
+      after_tab = substr($0, RSTART + 1)
+      $0 = sprintf("%s%*s%s", before_tab, 8 - (RSTART - 1) % 8, "", after_tab)
+    }
+  }
+
   78 < length && $0 ~ space {
     print "Line longer than 78 characters in commit message"
     status = 1
@@ -103,12 +112,7 @@ exec $awk '
   }
 
   $0 ~ non_print {
-    if (gsub(/\t/, "")) {
-      print "Tab in commit message; please use spaces instead"
-    }
-    if ($0 ~ non_print) {
-      print "Unprintable character in commit message"
-    }
+    print "Unprintable character in commit message"
     status = 1
   }
 
-- 
2.39.5