Convert prefer-rebase to update.
[git-central.git] / server / update-prefer-rebase
1 #!/bin/sh
2
3 # Command line
4 refname="$1"
5 oldrev="$2"
6 newrev="$3"
7
8 if expr "$oldrev" : '0*$' >/dev/null ; then
9         exit 0
10 fi
11
12 git rev-parse --not --branches | git rev-list --stdin $oldrev..$newrev | while read commit ; do
13         number_of_parents=$(git rev-list -n 1 --parents $commit | sed 's/ /\n/g' | grep -v $commit | wc -l)
14         if [[ $number_of_parents > 1 ]] ; then
15                 # Find the original branch point (B)
16                 parents=$(git rev-list -n 1 --parents $commit | sed 's/ /\n/g' | grep -v $commit)
17                 baserev=$(git merge-base $parents)
18
19                 # For each parent
20                 git rev-list -n 1 --parents $commit | sed 's/ /\n/g' | grep -v $commit | while read parent ; do
21                         all_commits=$(git rev-list $baserev..$parent | wc -l)
22                         new_commits=$(git rev-parse --not --branches | git rev-list --stdin $baserev..$parent | wc -l)
23                         if [[ $all_commits -eq $new_commits ]] ; then
24                                 echo "----------------------------------------------------"
25                                 echo
26                                 echo "It looks like you should rebase instead of merging $commit"
27                                 echo
28                                 echo "----------------------------------------------------"
29                                 exit 1
30                         fi
31                 done
32                 if [ $? -ne 0 ] ; then
33                         exit 1
34                 fi
35         fi
36 done
37