Don't send masses of mails when pushing branch without new commits
authorSimon Schubert <corecode@dragonflybsd.org>
Tue, 3 Feb 2009 23:16:40 +0000 (00:16 +0100)
committerSimon Schubert <corecode@dragonflybsd.org>
Tue, 3 Feb 2009 23:16:40 +0000 (00:16 +0100)
The original code seemed to assume that there were always new changes when
creating a new branch.  The code would fail if the new branch would not
contain new commits and instead would ignore the existing, duplicated branch
and mail out all its changes as new.

post-receive-email

index fb2fdea..d72a50d 100755 (executable)
@@ -185,7 +185,6 @@ generate_email()
                        {
                        generate_email_header
                        generate_${change_type}_branch_email
-                       summarize_branch_revs
                        generate_email_footer
                        } | $send_mail
                fi
@@ -272,11 +271,24 @@ generate_create_branch_email()
 {
        # This is a new branch and so oldrev is not valid
        echo "        at  $newrev ($newrev_type)"
+       echo ""
 }
 
 list_create_branch_revs()
 {
-       git rev-parse --not --branches | grep -v $(git rev-parse $refname) |
+       # We want to list all revs that are reachable now, but
+       # were not before.
+       # All revs that were reachable before are git rev-parse --branches.
+       # However, this includes $refname.  The naive | grep -v $branchtip
+       # will not work, because another branch might already have been on
+       # $branchtip.  In this case we shouldn't list any rev.
+       # As git rev-parse --branches might list a given rev multiple times
+       # if there are multiple branches at this rev, we simply drop this
+       # $branchtip rev once, and pass all subsequent ones through.
+
+       branchtip=$(git rev-parse $refname)
+
+       git rev-parse --not --branches | sed -e "1,/$branchtip/{/$branchtip/d;}" |
        git rev-list --reverse --stdin $newrev
 }