Ticket #1342: pre-receive

File pre-receive, 788 bytes (added by adelton, 5 years ago)

I've been asked to provide attribution to the script.

Line 
1#!/bin/bash
2
3# Author: Jan Pazdziora
4# This code is free software. It can be used and distributed under the
5# same terms as git itself.
6
7while read old_sha1 new_sha1 refname ; do
8        # echo "stdin: [$old_sha1] [$new_sha1] [$refname]"
9        git rev-list --parents $old_sha1..$new_sha1 \
10                | while read sha1 parents ; do
11                        # echo "  commit: [$sha1] [$parents]"
12                        if [ "${parents/ /}" != "$parents" ] ; then
13                                # echo "   -> merge"
14                                if ! ( git cat-file commit $sha1 \
15                                        | perl -e 'BEGIN { $/ = "\n\n" }
16                                                scalar(<>);
17                                                my $msg = <>;
18                                                if ($msg =~ /^Merge branch \S+ of \S+\n*$/s) {
19                                                        exit 1
20                                                }' ) ; then
21                                        echo "Commit [$sha1] looks like automatic merge when you did not rebase after pull."
22                                        exit 1
23                                fi
24                        fi
25                done
26        [ $? -ne 0 ] && exit 1
27        :
28done
29
30exit $?
31