summaryrefslogtreecommitdiffstats
path: root/t/personal-branches.t
diff options
context:
space:
mode:
Diffstat (limited to 't/personal-branches.t')
-rwxr-xr-xt/personal-branches.t100
1 files changed, 100 insertions, 0 deletions
diff --git a/t/personal-branches.t b/t/personal-branches.t
new file mode 100755
index 0000000..8a08128
--- /dev/null
+++ b/t/personal-branches.t
@@ -0,0 +1,100 @@
+#!/usr/bin/perl
+use strict;
+use warnings;
+
+# this is hardcoded; change it if needed
+use lib "src/lib";
+use Gitolite::Test;
+
+# personal branches
+# ----------------------------------------------------------------------
+
+try "plan 64";
+
+confreset;confadd '
+ @admins = admin dev1
+ repo gitolite-admin
+ RW+ = admin
+
+ repo testing
+ RW+ = @all
+
+ @g1 = t1
+ repo @g1
+ R = u2
+ RW = u3
+ RW+ = u4
+ RW a/USER/ = @all
+ RW+ p/USER/ = u1 u6
+';
+
+try "ADMIN_PUSH set1; !/FATAL/" or die text();
+
+try "
+
+ gitolite access t1 u1; ok; /refs/heads/p/u1//; !/DENIED/
+ gitolite access t1 u5; !ok; /\\+ any t1 u5 DENIED by fallthru/
+ gitolite access \@g1 u5 W; ok; /refs/heads/a/u5//; !/DENIED/
+
+ gitolite access t1 u1 W refs/heads/a/user1/foo; !ok; /W refs/heads/a/user1/foo t1 u1 DENIED by fallthru/
+ gitolite access \@g1 u1 + refs/heads/a/user1/foo; !ok; /\\+ refs/heads/a/user1/foo \@g1 u1 DENIED by fallthru/
+ gitolite access t1 u1 W refs/heads/p/user1/foo; !ok; /W refs/heads/p/user1/foo t1 u1 DENIED by fallthru/
+ gitolite access \@g1 u1 + refs/heads/p/user1/foo; !ok; /\\+ refs/heads/p/user1/foo \@g1 u1 DENIED by fallthru/
+
+ gitolite access \@g1 u1 W refs/heads/a/u1/foo; ok; /refs/heads/a/u1//; !/DENIED/
+ gitolite access t1 u1 + refs/heads/a/u1/foo; !ok; /\\+ refs/heads/a/u1/foo t1 u1 DENIED by fallthru/
+ gitolite access \@g1 u1 W refs/heads/p/u1/foo; ok; /refs/heads/p/u1//; !/DENIED/
+ gitolite access t1 u1 + refs/heads/p/u1/foo; ok; /refs/heads/p/u1//; !/DENIED/
+
+ gitolite access \@g1 u1 W refs/heads/p/u2/foo; !ok; /W refs/heads/p/u2/foo \@g1 u1 DENIED by fallthru/
+ gitolite access t1 u1 + refs/heads/p/u2/foo; !ok; /\\+ refs/heads/p/u2/foo t1 u1 DENIED by fallthru/
+";
+
+confreset; confadd '
+ @staff = u1 u2 u3 u4 u5 u6
+ @gfoo = foo
+ repo @gfoo
+ RW+ = u1 u2
+ RW+ p/USER/ = u3 u4
+ RW temp = u5 u6
+';
+
+try "ADMIN_PUSH set1; !/FATAL/" or die text();
+
+try "
+ DEF OK = gitolite access foo %1 %2 refs/heads/%3; ok
+ DEF NOK = gitolite access foo %1 %2 refs/heads/%3; !ok
+";
+
+try "
+
+# u1 and u2 can push
+ OK u1 W master
+ OK u2 W master
+ OK u2 W p/u1/foo
+ OK u1 W p/u2/foo
+ OK u1 W p/u3/foo
+
+# u3 cant push u1/u4 personal branches
+ NOK u3 W p/u1/foo
+ NOK u3 W p/u4/doo
+
+# u4 can push u4 personal branch
+ OK u4 W p/u4/foo
+# u5 push temp
+ OK u5 W temp
+
+# u1 and u2 can rewind
+ OK u1 + master
+ OK u2 + p/u1/foo
+ OK u1 + p/u2/foo
+ OK u1 + p/u3/foo
+
+# u3 cant rewind u1/u4 personal branches
+ NOK u3 + p/u1/foo
+ NOK u3 + p/u4/foo
+# u4 can rewind u4 personal branch
+ OK u4 + p/u4/foo
+# u5 cant rewind temp
+ NOK u5 + temp
+";