summaryrefslogtreecommitdiffstats
path: root/t/merge-check.t
blob: fdea318fa6ba5d535bdf764510a8d77588b3fed6 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
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/
";