diff options
Diffstat (limited to '')
-rwxr-xr-x | t/merge-check.t | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/t/merge-check.t b/t/merge-check.t new file mode 100755 index 0000000..fdea318 --- /dev/null +++ b/t/merge-check.t @@ -0,0 +1,95 @@ +#!/usr/bin/perl +use strict; +use warnings; + +# this is hardcoded; change it if needed +use lib "src/lib"; +use Gitolite::Test; + +# merge check -- the M flag +# ---------------------------------------------------------------------- + +try "plan 55"; + +confreset;confadd ' + repo foo + RW+M = u1 + RW+ = u2 + RWM .= u3 + RW = u4 +'; + +try "ADMIN_PUSH set1; !/FATAL/" or die text(); + +# setup a merged push + +try " + cd .. + [ -d foo ]; !ok + glt clone u1 file:///foo + ok; /Cloning into/ + /You appear to have cloned an empty/ +"; + +try " + cd foo; ok + [ -d .git ]; ok + test-commit aa; ok; /1 file changed, 1 insertion/ + tag start; ok + glt push u1 origin master + ok; /new branch.*master.-..master/ + /create.delete ignored.*merge-check/ + checkout -b new; ok; /Switched to a new branch 'new'/ + test-commit bb cc; ok + checkout master; ok; /Switched to branch 'master'/ + test-commit dd ee; ok + git merge new; ok; /Merge made.*recursive/ + test-commit ff; ok + tag end; ok +"; + +# push by u4 should fail +try " + glt push u4 file:///foo master + !ok; /WM refs/heads/master foo u4 DENIED by fallthru/ + /To file:///foo/ + /remote rejected.*hook declined/ + /failed to push some refs/ +"; + +# push by u3 should succeed +try " + glt push u3 file:///foo master + ok; /To file:///foo/; /master.-..master/ +"; + +# rewind by u3 should fail +try " + reset-h start; ok; /HEAD is now at .* aa / + glt push u3 file:///foo +master + !ok; /rejected.*hook declined/ + /failed to push some refs/ +"; + +# rewind by u2 should succeed +try " + glt push u2 file:///foo +master + ok; /To file:///foo/ + /forced update/ +"; + +# push by u2 should fail +try " + reset-h end; ok; /HEAD is now at .* ff / + glt push u2 file:///foo master + !ok; /WM refs/heads/master foo u2 DENIED by fallthru/ + /To file:///foo/ + /remote rejected.*hook declined/ + /failed to push some refs/ +"; + +# push by u1 should succeed +try " + glt push u1 file:///foo master + ok; /master.-..master/ +"; |