From: Stephen Haberman Date: Tue, 24 Jun 2008 17:47:30 +0000 (-0500) Subject: Convert stable to update. X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=2a6f662710be532e1960fffff8d6b8347f410853;p=git-central.git Convert stable to update. --- diff --git a/cbas/pre-receive b/cbas/pre-receive index 800f366..a0684d8 100755 --- a/cbas/pre-receive +++ b/cbas/pre-receive @@ -6,6 +6,5 @@ while read newref oldref refname ; do input="$input$newref $oldref $refname$nl" done -echo -n "$input" | sh /srv/git/hooks/server/pre-receive-only-one && -echo -n "$input" | sh /srv/git/hooks/server/pre-receive-stable +echo -n "$input" | sh /srv/git/hooks/server/pre-receive-only-one diff --git a/cbas/update b/cbas/update index baa1bdb..885aff4 100755 --- a/cbas/update +++ b/cbas/update @@ -6,5 +6,6 @@ newrev="$3" sh /srv/git/hooks/server/update-trac "$refname" "$oldrev" "$newrev" && sh /srv/git/hooks/server/update-allow-tags-branches "$refname" "$oldrev" "$newrev" && -sh /srv/git/hooks/server/update-prefer-rebase "$refname" "$oldrev" "$newrev" +sh /srv/git/hooks/server/update-prefer-rebase "$refname" "$oldrev" "$newrev" && +sh /srv/git/hooks/server/update-stable "$refname" "$oldrev" "$newrev" diff --git a/server/pre-receive-stable b/server/pre-receive-stable deleted file mode 100644 index 7e2fd60..0000000 --- a/server/pre-receive-stable +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -while read oldrev newrev refname ; do - if expr "$oldrev" : '0*$' >/dev/null ; then - exit 0 - fi - - if [ "$refname" != "refs/heads/stable" ] ; then - exit 0 - fi - - # read backwards: - # - all commits from old..new - # - unless they were already pointed to by a branch - # - unless that branch is us - # = all new commits on stable - count=$(git rev-parse --not --branches | grep -v $(git rev-parse $refname) | git rev-list --stdin $oldrev..$newrev | wc -l) - if [ "$count" -ne "0" ] ; then - newname=$(git rev-parse "$newrev") - echo "----------------------------------------------------" - echo - echo "Moving stable to $newname includes a new commit" - echo - echo "----------------------------------------------------" - exit 1 - fi -done - - diff --git a/server/pre-receive-stable-then-noop b/server/pre-receive-stable-then-noop deleted file mode 100644 index 5ed7e5c..0000000 --- a/server/pre-receive-stable-then-noop +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -input="" -while read line ; do - input="$input$line" -done - -echo $input | sh $GIT_DIR/hooks/pre-receive-stable && -echo $input | sh $GIT_DIR/hooks/noop - diff --git a/server/update-stable b/server/update-stable new file mode 100644 index 0000000..416495c --- /dev/null +++ b/server/update-stable @@ -0,0 +1,31 @@ +#!/bin/sh + +# Command line +refname="$1" +oldrev="$2" +newrev="$3" + +if expr "$oldrev" : '0*$' >/dev/null ; then + exit 0 +fi + +if [ "$refname" != "refs/heads/stable" ] ; then + exit 0 +fi + +# read backwards: +# - all commits from old..new +# - unless they were already pointed to by a branch +# = all new commits on stable +count=$(git rev-parse --not --branches | git rev-list --stdin $oldrev..$newrev | wc -l) +if [ "$count" -ne "0" ] ; then + newname=$(git rev-parse "$newrev") + echo "----------------------------------------------------" + echo + echo "Moving stable to $newname includes a new commit" + echo + echo "----------------------------------------------------" + exit 1 +fi + + diff --git a/tests/t2100-server-pre-receive-stable.sh b/tests/t2100-server-pre-receive-stable.sh deleted file mode 100644 index 029f574..0000000 --- a/tests/t2100-server-pre-receive-stable.sh +++ /dev/null @@ -1,92 +0,0 @@ -#!/bin/sh - -test_description='server pre-receive stable enforcer' - -. ./test-lib.sh - -test_expect_success 'setup' ' - echo This is a test. >a && - git add a && - git commit -m "a" && - git clone ./. server && - rm -fr server/.git/hooks && - git checkout -b stable && - git remote add origin ./server && - git push origin stable && - git config --add branch.stable.remote origin && - git config --add branch.stable.merge refs/heads/stable -' - -# setup the pre-receive hook -install_server_hook 'pre-receive-stable' 'pre-receive' - -test_expect_success 'reject commit directly to stable' ' - echo $test_name >a && - git commit -a -m "$test_name going onto stable" && - head=$(git rev-parse HEAD) && - ! git push 2>push.err && - cat push.err | grep "Moving stable to $head includes a new commit" && - git reset --hard HEAD^ -' - -test_expect_success 'reject aged topic branch' ' - # make one topic branch - git checkout -b topic1 stable && - echo $test_name >topic1 && - git add topic1 && - git commit -m "$test_name topic1" && - git push origin topic1 && - - # now make another topic - git checkout -b topic2 stable - echo $test_name >topic2 && - git add topic2 && - git commit -m "$test_name topic2" && - git push origin topic2 && - - # merge in topic2 - git checkout stable && - git merge topic2 && - git push && - - # merge in topic1 fails - git merge topic1 && - head=$(git rev-parse HEAD) && - ! git push 2>push.err && - cat push.err | grep "Moving stable to $head includes a new commit" && - git reset --hard ORIG_HEAD -' - -test_expect_success 'accept updated aged topic branch' ' - # make one topic branch - git checkout -b topic3 stable && - echo $test_name >topic3 && - git add topic3 && - git commit -m "$test_name topic3" && - git push origin topic3 && - - # now make another topic - git checkout -b topic4 stable - echo $test_name >topic4 && - git add topic4 && - git commit -m "$test_name topic4" && - git push origin topic4 && - - # merge in topic4 - git checkout stable && - git merge topic4 && - git push && - - # update topic3 first - git checkout topic3 && - git merge stable && - git push && - - # Now we can update stable - git checkout stable && - git merge topic3 && - git push -' - -test_done - diff --git a/tests/t2100-server-update-stable.sh b/tests/t2100-server-update-stable.sh new file mode 100644 index 0000000..32dd039 --- /dev/null +++ b/tests/t2100-server-update-stable.sh @@ -0,0 +1,92 @@ +#!/bin/sh + +test_description='server update stable enforcer' + +. ./test-lib.sh + +test_expect_success 'setup' ' + echo This is a test. >a && + git add a && + git commit -m "a" && + git clone ./. server && + rm -fr server/.git/hooks && + git checkout -b stable && + git remote add origin ./server && + git push origin stable && + git config --add branch.stable.remote origin && + git config --add branch.stable.merge refs/heads/stable +' + +# setup the update hook +install_server_hook 'update-stable' 'update' + +test_expect_success 'reject commit directly to stable' ' + echo $test_name >a && + git commit -a -m "$test_name going onto stable" && + head=$(git rev-parse HEAD) && + ! git push 2>push.err && + cat push.err | grep "Moving stable to $head includes a new commit" && + git reset --hard HEAD^ +' + +test_expect_success 'reject aged topic branch' ' + # make one topic branch + git checkout -b topic1 stable && + echo $test_name >topic1 && + git add topic1 && + git commit -m "$test_name topic1" && + git push origin topic1 && + + # now make another topic + git checkout -b topic2 stable + echo $test_name >topic2 && + git add topic2 && + git commit -m "$test_name topic2" && + git push origin topic2 && + + # merge in topic2 + git checkout stable && + git merge topic2 && + git push && + + # merge in topic1 fails + git merge topic1 && + head=$(git rev-parse HEAD) && + ! git push 2>push.err && + cat push.err | grep "Moving stable to $head includes a new commit" && + git reset --hard ORIG_HEAD +' + +test_expect_success 'accept updated aged topic branch' ' + # make one topic branch + git checkout -b topic3 stable && + echo $test_name >topic3 && + git add topic3 && + git commit -m "$test_name topic3" && + git push origin topic3 && + + # now make another topic + git checkout -b topic4 stable + echo $test_name >topic4 && + git add topic4 && + git commit -m "$test_name topic4" && + git push origin topic4 && + + # merge in topic4 + git checkout stable && + git merge topic4 && + git push && + + # update topic3 first + git checkout topic3 && + git merge stable && + git push && + + # Now we can update stable + git checkout stable && + git merge topic3 && + git push +' + +test_done + diff --git a/tests/t2101-server-pre-receive-stable-via-shim.sh b/tests/t2101-server-pre-receive-stable-via-shim.sh deleted file mode 100644 index a457aed..0000000 --- a/tests/t2101-server-pre-receive-stable-via-shim.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh - -test_description='server pre-receive stable enforcer' - -. ./test-lib.sh - -test_expect_success 'setup' ' - echo This is a test. >a && - git add a && - git commit -m "a" && - git clone ./. server && - rm -fr server/.git/hooks && - git checkout -b stable && - git remote add origin ./server && - git push origin stable && - git config --add branch.stable.remote origin && - git config --add branch.stable.merge refs/heads/stable -' - -# setup the pre-receive hook -install_server_hook 'pre-receive-stable' 'pre-receive-stable' -install_server_hook 'noop' 'noop' -install_server_hook 'pre-receive-stable-then-noop' 'pre-receive' - -test_expect_success 'reject commit directly to stable' ' - echo $test_name >a && - git commit -a -m "$test_name going onto stable" && - head=$(git rev-parse HEAD) && - ! git push 2>push.err && - cat push.err | grep "Moving stable to $head includes a new commit" -' - -test_done -