diff options
Diffstat (limited to 'git/template/hooks/prepare-commit-msg.awk')
-rwxr-xr-x | git/template/hooks/prepare-commit-msg.awk | 45 |
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 +} |