aboutsummaryrefslogtreecommitdiff
path: root/git/template/hooks/prepare-commit-msg.awk
diff options
context:
space:
mode:
Diffstat (limited to 'git/template/hooks/prepare-commit-msg.awk')
-rwxr-xr-xgit/template/hooks/prepare-commit-msg.awk45
1 files changed, 45 insertions, 0 deletions
diff --git a/git/template/hooks/prepare-commit-msg.awk b/git/template/hooks/prepare-commit-msg.awk
new file mode 100755
index 00000000..2fe43c5b
--- /dev/null
+++ b/git/template/hooks/prepare-commit-msg.awk
@@ -0,0 +1,45 @@
+# Filter to clean up a merge commit; still experimental on tejr's part.
+
+# If the second argument to this script is "merge", this is a merge commit, and
+# we know we need to filter it; otherwise we can just bail out directly
+BEGIN {
+ if (ARGV[2] != "merge")
+ exit(0)
+ message = ARGV[1]
+ ARGC = 2
+}
+
+# This line starts with an asterisk, so we're starting the commit listings for
+# a new branch; save the whole line into a variable and skip to the next line
+/^\* / {
+ branch = $0
+ next
+}
+
+# Commit message subject patterns to skip go here; be as precise as you can
+$0 == " Bump VERSION" { next } # Skip version number bumps
+
+# This line is blank, or a comment; reset the branch
+!NF || $1 ~ /^#/ { branch = 0 }
+
+# Don't emit consecutive blanks
+NF { blank = 0 }
+!NF && blank++ { next }
+
+# If we got past this point, we have an actual commit line to include, so if
+# there's a branch heading yet to print, we should do so now; add it to the
+# line buffer
+branch {
+ lines[++l] = branch
+ branch = 0
+}
+
+# Add the current line to the line buffer
+{ lines[++l] = $0 }
+
+# If we set the message filename in BEGIN due to this being a merge commit,
+# write our filtered message back to that file, and we're done
+END {
+ for (i = 1; message && i <= l; i++)
+ print lines[i] > message
+}