Merge branch 'master' of git://git.kernel.org/pub/scm/gitk/gitk
[git] / t / t5400-send-pack.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2005 Junio C Hamano
4 #
5
6 test_description='See why rewinding head breaks send-pack
7
8 '
9 . ./test-lib.sh
10
11 cnt=64
12 test_expect_success setup '
13         test_tick &&
14         mkdir mozart mozart/is &&
15         echo "Commit #0" >mozart/is/pink &&
16         git update-index --add mozart/is/pink &&
17         tree=$(git write-tree) &&
18         commit=$(echo "Commit #0" | git commit-tree $tree) &&
19         zero=$commit &&
20         parent=$zero &&
21         i=0 &&
22         while test $i -le $cnt
23         do
24             i=$(($i+1)) &&
25             test_tick &&
26             echo "Commit #$i" >mozart/is/pink &&
27             git update-index --add mozart/is/pink &&
28             tree=$(git write-tree) &&
29             commit=$(echo "Commit #$i" | git commit-tree $tree -p $parent) &&
30             git update-ref refs/tags/commit$i $commit &&
31             parent=$commit || return 1
32         done &&
33         git update-ref HEAD "$commit" &&
34         git-clone ./. victim &&
35         cd victim &&
36         git log &&
37         cd .. &&
38         git update-ref HEAD "$zero" &&
39         parent=$zero &&
40         i=0 &&
41         while test $i -le $cnt
42         do
43             i=$(($i+1)) &&
44             test_tick &&
45             echo "Rebase #$i" >mozart/is/pink &&
46             git update-index --add mozart/is/pink &&
47             tree=$(git write-tree) &&
48             commit=$(echo "Rebase #$i" | git commit-tree $tree -p $parent) &&
49             git update-ref refs/tags/rebase$i $commit &&
50             parent=$commit || return 1
51         done &&
52         git update-ref HEAD "$commit" &&
53         echo Rebase &&
54         git log'
55
56 test_expect_success 'pack the source repository' '
57         git repack -a -d &&
58         git prune
59 '
60
61 test_expect_success 'pack the destination repository' '
62         cd victim &&
63         git repack -a -d &&
64         git prune &&
65         cd ..
66 '
67
68 test_expect_success \
69         'pushing rewound head should not barf but require --force' '
70         # should not fail but refuse to update.
71         if git-send-pack ./victim/.git/ master
72         then
73                 # now it should fail with Pasky patch
74                 echo >&2 Gaah, it should have failed.
75                 false
76         else
77                 echo >&2 Thanks, it correctly failed.
78                 true
79         fi &&
80         if cmp victim/.git/refs/heads/master .git/refs/heads/master
81         then
82                 # should have been left as it was!
83                 false
84         else
85                 true
86         fi &&
87         # this should update
88         git-send-pack --force ./victim/.git/ master &&
89         cmp victim/.git/refs/heads/master .git/refs/heads/master
90 '
91
92 test_expect_success \
93         'push can be used to delete a ref' '
94         cd victim &&
95         git branch extra master &&
96         cd .. &&
97         test -f victim/.git/refs/heads/extra &&
98         git-send-pack ./victim/.git/ :extra master &&
99         ! test -f victim/.git/refs/heads/extra
100 '
101
102 unset GIT_CONFIG GIT_CONFIG_LOCAL
103 HOME=`pwd`/no-such-directory
104 export HOME ;# this way we force the victim/.git/config to be used.
105
106 test_expect_success \
107         'pushing with --force should be denied with denyNonFastforwards' '
108         cd victim &&
109         git config receive.denyNonFastforwards true &&
110         cd .. &&
111         git update-ref refs/heads/master master^ || return 1
112         git-send-pack --force ./victim/.git/ master && return 1
113         ! git diff .git/refs/heads/master victim/.git/refs/heads/master
114 '
115
116 test_done