Merge branch 'jk/maint-mv'
[git] / t / t5800-remote-helpers.sh
1 #!/bin/sh
2 #
3 # Copyright (c) 2010 Sverre Rabbelier
4 #
5
6 test_description='Test remote-helper import and export commands'
7
8 . ./test-lib.sh
9
10 if ! test_have_prereq PYTHON ; then
11         skip_all='skipping git-remote-hg tests, python not available'
12         test_done
13 fi
14
15 "$PYTHON_PATH" -c '
16 import sys
17 if sys.hexversion < 0x02040000:
18     sys.exit(1)
19 ' || {
20         skip_all='skipping git-remote-hg tests, python version < 2.4'
21         test_done
22 }
23
24 compare_refs() {
25         git --git-dir="$1/.git" rev-parse --verify $2 >expect &&
26         git --git-dir="$3/.git" rev-parse --verify $4 >actual &&
27         test_cmp expect actual
28 }
29
30 test_expect_success 'setup repository' '
31         git init --bare server/.git &&
32         git clone server public &&
33         (cd public &&
34          echo content >file &&
35          git add file &&
36          git commit -m one &&
37          git push origin master)
38 '
39
40 test_expect_success 'cloning from local repo' '
41         git clone "testgit::${PWD}/server" localclone &&
42         test_cmp public/file localclone/file
43 '
44
45 test_expect_success 'cloning from remote repo' '
46         git clone "testgit::file://${PWD}/server" clone &&
47         test_cmp public/file clone/file
48 '
49
50 test_expect_success 'create new commit on remote' '
51         (cd public &&
52          echo content >>file &&
53          git commit -a -m two &&
54          git push)
55 '
56
57 test_expect_success 'pulling from local repo' '
58         (cd localclone && git pull) &&
59         test_cmp public/file localclone/file
60 '
61
62 test_expect_success 'pulling from remote remote' '
63         (cd clone && git pull) &&
64         test_cmp public/file clone/file
65 '
66
67 test_expect_success 'pushing to local repo' '
68         (cd localclone &&
69         echo content >>file &&
70         git commit -a -m three &&
71         git push) &&
72         compare_refs localclone HEAD server HEAD
73 '
74
75 test_expect_success 'synch with changes from localclone' '
76         (cd clone &&
77          git pull)
78 '
79
80 test_expect_success 'pushing remote local repo' '
81         (cd clone &&
82         echo content >>file &&
83         git commit -a -m four &&
84         git push) &&
85         compare_refs clone HEAD server HEAD
86 '
87
88 test_expect_success 'fetch new branch' '
89         (cd public &&
90          git checkout -b new &&
91          echo content >>file &&
92          git commit -a -m five &&
93          git push origin new
94         ) &&
95         (cd localclone &&
96          git fetch origin new
97         ) &&
98         compare_refs public HEAD localclone FETCH_HEAD
99 '
100
101 test_expect_success 'fetch multiple branches' '
102         (cd localclone &&
103          git fetch
104         ) &&
105         compare_refs server master localclone refs/remotes/origin/master &&
106         compare_refs server new localclone refs/remotes/origin/new
107 '
108
109 test_expect_success 'push when remote has extra refs' '
110         (cd clone &&
111          echo content >>file &&
112          git commit -a -m six &&
113          git push
114         ) &&
115         compare_refs clone master server master
116 '
117
118 test_expect_success 'push new branch by name' '
119         (cd clone &&
120          git checkout -b new-name  &&
121          echo content >>file &&
122          git commit -a -m seven &&
123          git push origin new-name
124         ) &&
125         compare_refs clone HEAD server refs/heads/new-name
126 '
127
128 test_expect_failure 'push new branch with old:new refspec' '
129         (cd clone &&
130          git push origin new-name:new-refspec
131         ) &&
132         compare_refs clone HEAD server refs/heads/new-refspec
133 '
134
135 test_done