Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

git hook for legit commit message (#123 good message)

I need to make sure commit messages are some what legit else reject it. The commit message should be like "#123 fixing missing bracket"

I want to make sure it begins with hash, there is an integer (no 123a), and the message is at least 10 words.

Nice to have: the message would not be the exact same in a row

I am using this Trac plugin for change set, it describes the commit message format in more detail http://trac-hacks.org/wiki/TracTicketChangelogPlugin

Thanks,

like image 698
Mike Henke Avatar asked Aug 22 '11 21:08

Mike Henke


2 Answers

You can create a pre-receive hook that refuses commits based on any criteria you like - you just have to print an error to standard output and exit with a non-zero status. For example, something along the lines of:

#!/bin/sh
while read rev_old rev_new ref
do
    MALFORMED="$(git rev-list --oneline $rev_old..$rev_new | egrep -v '^[a-f0-9]+ #[0-9]+ ')"
    if [ x"$MALFORMED" != x ]
    then
        echo Some commits had a malformed subject line
        exit 1
    fi
done

(I haven't tested that, but you get the idea...)

like image 165
Mark Longair Avatar answered Sep 28 '22 15:09

Mark Longair


I created a commit-msg hook with:

#!/usr/bin/env ruby
message_file = ARGV[0]
message = File.read(message_file)

#starts with # then number, space, and at least 5 words no more than 200
$regex = /(^#[0-9]+ \W*(\w+(\W+|$)){5,200})/

if !$regex.match(message)
puts "Your message is not formatted correctly (example: #XXX at least 5 words)"
exit 1
end

I borrowed from this blog post http://fhopf.blogspot.com/2011/01/git-hook-for-redmine-messages.html

like image 44
Mike Henke Avatar answered Sep 28 '22 15:09

Mike Henke