X-Git-Url: http://repo.macrolet.net/gitweb/?a=blobdiff_plain;f=git%2Fpost-receive-email;h=c565634e6e2f257a1ae00fc2f605a311db5bd971;hb=4150a9f9936714c8a04fc2cd8ae6df26ec5f7db8;hp=beecf4379d1d78f2d2515283892e6b17fbcd7405;hpb=6345a76292d36a956e2f804ccd83a418a2539314;p=sbcl.git diff --git a/git/post-receive-email b/git/post-receive-email index beecf43..c565634 100755 --- a/git/post-receive-email +++ b/git/post-receive-email @@ -405,8 +405,8 @@ generate_update_branch_email() # 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 @@ -704,26 +704,46 @@ if [ -n "$1" -a -n "$2" -a -n "$3" ]; then 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