# echo "Those revisions listed above that are new to this repository have"
# echo "not appeared on any other notification email; so we list those"
# echo "revisions in full, below."
+ # echo ""
- echo ""
echo $LOGBEGIN
show_new_revisions
else
while read oldrev newrev refname
do
- echo "Sending email for $refname: $oldrev -> $newrev"
+ echo "Sending mail for $refname: $oldrev -> $newrev"
# SBCL KLUDGE: the default script sends one email per
# push. We want one per commit. As long as we're
# in fast-forward-only world, this should do the
# right thing.
- if (expr "$oldrev" : '0*$' >/dev/null || # create
- expr "$newrev" : '0*$' >/dev/null || # delete
- (! expr "$refname" : "refs/heads/" > /dev/null) || # not a branch
- git rev-parse --verify --quiet "$newrev"^2 > /dev/null) # merge commit
+ if (expr "$oldrev" : '0*$' >/dev/null || # create
+ expr "$newrev" : '0*$' >/dev/null || # delete
+ ! expr "$refname" : "refs/heads/" > /dev/null) # not a branch
then
# Just one email.
+ echo "Not a branch update: all changes in one email."
generate_email $oldrev $newrev $refname | send_mail
else
- # Simple branch update, one mail per commit.
- lastrev=$oldrev
- for step in $(git rev-list --reverse $oldrev..$newrev)
- do
- generate_email $lastrev $step $refname | send_mail
- lastrev=$step
- done
+ # Get all revisions from old to new.
+ revlist=$(git rev-list --reverse $oldrev..$newrev)
+ no_merges=true
+ # Check for merges.
+ for rev in $revlist
+ do
+ if ($no_merges && git rev-parse --verify --quiet "$rev"^2 > /dev/null)
+ then
+ echo "Merge detected: $rev. Sending all commits in a single email."
+ no_merges=false
+ fi
+ done
+ if $no_merges
+ then
+ # Simple branch update, one mail per commit.
+ echo "Sending one email per commit."
+ lastrev=$oldrev
+ for step in $revlist
+ do
+ echo "Sending: $(git log -n1 --oneline $step)"
+ generate_email $lastrev $step $refname | send_mail
+ lastrev=$step
+ done
+ else
+ # There's a merge -- just one email.
+ generate_email $oldrev $newrev $refname | send_mail
+ fi
fi
done
fi