It's unlikely, but warn the user to update first before telling them they need to...
authorStephen Haberman <stephen@exigencecorp.com>
Wed, 15 Oct 2008 03:40:03 +0000 (22:40 -0500)
committerStephen Haberman <stephen@exigencecorp.com>
Wed, 15 Oct 2008 03:41:10 +0000 (22:41 -0500)
server/update-ensure-follows
tests/t2700-server-ensure-follows.sh

index 2cf6338..a3c6b92 100644 (file)
@@ -50,7 +50,14 @@ for ((i = 0 ; i < count ; i++)) do
        if [ $? -eq 0 ] ; then
                missing_commits=$(git log ^$newrev $follow --pretty=oneline | wc -l)
                if [ $missing_commits -ne 0 ] ; then
-                       display_error_message "You need to merge $follow into $short_refname"
+                       # If for some reason people are stupid and push with a --force flag,
+                       # we should warn them to update first in case one of their teammates
+                       # already merged for them
+                       if [ "$(git merge-base $oldrev $newrev)" != "$oldrev" ] ; then
+                               display_error_message "You need to update your local branch $short_refname"
+                       else
+                               display_error_message "You need to merge $follow into $short_refname"
+                       fi
                        exit 1
                fi
        fi
index a5eb1fa..0f9b8f9 100644 (file)
@@ -11,8 +11,6 @@ test_expect_success 'setup' '
        git clone ./. server &&
        rm -fr server/.git/hooks &&
        git remote add origin ./server &&
-       git config --add branch.master.remote origin &&
-       git config --add branch.master.merge refs/heads/master &&
        git fetch
 '
 
@@ -51,6 +49,29 @@ test_expect_success 'branch with moved stable requires merge' '
        git push origin topic1
 '
 
+test_expect_success 'branch with moved stable is told to update first' '
+       git checkout stable &&
+       echo "$test_name" >a &&
+       git commit -a -m "Change on stable" &&
+       git push origin stable &&
+
+       # Someone fixes stable first
+       cd server &&
+       git checkout -f topic1 &&
+       git merge stable &&
+       cd .. &&
+
+       git checkout topic1 &&
+       echo "$test_name" >a.topic1 &&
+       git commit -a -m "Change on topic1." &&
+       ! git push --force origin topic1 2>push.err &&
+       cat push.err | grep "You need to update your local branch topic1" &&
+
+       # Now it will work as the teammate merged for us
+       git pull origin topic1 &&
+       git push origin topic1
+'
+
 test_expect_success 'branch with moved stable as second branch requires merge' '
        cd server &&
        git config hooks.update-ensure-follows.branches "foo stable" &&