#!/usr/bin/perl use strict; use warnings; # this is hardcoded; change it if needed use lib "src/lib"; use Gitolite::Test; # wild repos - part 1 # ---------------------------------------------------------------------- try "plan 66"; confreset;confadd ' @prof = u1 @TAs = u2 u3 @students = u4 u5 u6 @gfoo = foo/CREATOR/a[0-9][0-9] repo @gfoo C = @all RW+ = CREATOR RW = WRITERS @TAs R = READERS @prof '; try "ADMIN_PUSH set1; !/FATAL/" or die text(); try " # reasonably complex setup; we'll do everything from one repo though cd .. # u1 create success glt clone u1 file:///foo/u1/a01; ok; /Initialized empty Git repository in .*/foo/u1/a01.git// # u2 create success glt clone u2 file:///foo/u2/a02; ok; /Initialized empty Git repository in .*/foo/u2/a02.git// # u4 tries to create u2 repo glt clone u4 file:///foo/u2/a12; !ok; /R any foo/u2/a12 u4 DENIED by fallthru/ # line anchored regexes glt clone u4 file:///foo/u4/a1234; !ok; /R any foo/u4/a1234 u4 DENIED by fallthru/ # u4 tries to create his own repo glt clone u4 file:///foo/u4/a12; ok; /Initialized empty Git repository in .*/foo/u4/a12.git// /warning: You appear to have cloned an empty repository./ # u4 push success cd a12 tc p-728 p-729 p-730 p-731; ok glt push u4 origin master; ok; /To file:///foo/u4/a12/ /\\* \\[new branch\\] master -> master/ # u1 clone success cd .. glt clone u1 file:///foo/u4/a12 u1a12; ok; /Cloning into 'u1a12'.../ # u1 push fail cd u1a12 tc m-778 m-779; ok; glt push u1 origin; !ok; /W any foo/u4/a12 u1 DENIED by fallthru/ # u2 clone success cd .. glt clone u2 file:///foo/u4/a12 u2a12; ok; /Cloning into 'u2a12'.../ # u2 push success cd u2a12 tc s-708 s-709; ok; glt push u2 origin; ok; /To file:///foo/u4/a12/ /master -> master/ # u2 rewind fail glt push u2 -f origin master^:master; !ok; /\\+ refs/heads/master foo/u4/a12 u2 DENIED by fallthru/ reject # u4 pull to sync up cd ../a12 glt pull u4; ok; /Fast-forward/ /From file:///foo/u4/a12/ /master -> origin/master/ # u4 rewind success git reset --hard HEAD^; ok glt push u4 -f; ok; /To file:///foo/u4/a12/ /\\+ .* master -> master \\(forced update\\)/ # u5 clone fail cd .. glt clone u5 file:///foo/u4/a12 u5a12; !ok; /R any foo/u4/a12 u5 DENIED by fallthru/ glt perms u4 foo/u4/a12 + READERS u5 glt perms u4 foo/u4/a12 + WRITERS u6 glt perms u4 foo/u4/a12 -l "; cmp 'READERS u5 WRITERS u6 '; try " # u5 clone success glt clone u5 file:///foo/u4/a12 u5a12; ok; /Cloning into 'u5a12'.../ # u5 push fail cd u5a12 tc y-743 y-744; ok glt push u5; !ok; /W any foo/u4/a12 u5 DENIED by fallthru/ # u6 clone success cd .. glt clone u6 file:///foo/u4/a12 u6a12; ok; /Cloning into 'u6a12'.../ # u6 push success cd u6a12 tc k-68 k-69; ok glt push u6 file:///foo/u4/a12; ok; /To file:///foo/u4/a12/ /master -> master/ # u6 rewind fail glt push u6 -f file:///foo/u4/a12 master^:master !ok; /\\+ refs/heads/master foo/u4/a12 u6 DENIED by fallthru/ reject ";