Raw
1 #!/bin/sh
2 # between master..seen, are there merges that bring in
3 # more than one topic at a time?
4
5 endpoint=${1-seen}
6
7 cnt1=$(git lgf --grep="Merge branch '" master..$endpoint | wc -l)
8 cnt2=$(git branch --no-merged master --merged $endpoint '??/*' | wc -l)
9
10 if test $cnt1 -eq $cnt2
11 then
12 exit 0
13 fi
14
15 tmp=/var/tmp/e.$$
16 rm -f "$tmp.1" "$tmp.2" &&
17 prev= &&
18 trap 'rm -f "$tmp."*' 0 || exit
19
20 git rev-list --merges --first-parent master..$endpoint |
21 while read commit
22 do
23 # $tmp.1 has remaining topics after the merge we are looking at.
24 # $tmp.2 has remaining topics after the previous merge that is
25 # a descendant of the current merge.
26
27 git branch --list --no-merged "$commit" '??/*' >"$tmp.1"
28 if test -f "$tmp.2" && test -n "$prev"
29 then
30 cnt=$(comm -23 "$tmp.1" "$tmp.2" | wc -l)
31 if test $cnt != 1
32 then
33 echo Merges multiple topics
34 git show -s --format="* %s" "$prev"
35 comm -23 "$tmp.1" "$tmp.2"
36 exit 1
37 fi
38 fi
39 mv -f "$tmp.1" "$tmp.2"
40 prev=$commit
41 done