aboutsummaryrefslogtreecommitdiff
path: root/t/t5801-remote-helpers.sh
blob: 6801529a89a10fff5a542fe2d1d0155a4a2a5c83 (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
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
#!/bin/sh
#
# Copyright (c) 2010 Sverre Rabbelier
#

test_description='Test remote-helper import and export commands'

. ./test-lib.sh

if ! type "${BASH-bash}" >/dev/null 2>&1; then
	skip_all='skipping remote-testgit tests, bash not available'
	test_done
fi

compare_refs() {
	git --git-dir="$1/.git" rev-parse --verify $2 >expect &&
	git --git-dir="$3/.git" rev-parse --verify $4 >actual &&
	test_cmp expect actual
}

test_expect_success 'setup repository' '
	git init --bare server/.git &&
	git clone server public &&
	(cd public &&
	 echo content >file &&
	 git add file &&
	 git commit -m one &&
	 git push origin master)
'

test_expect_success 'cloning from local repo' '
	git clone "testgit::${PWD}/server" localclone &&
	test_cmp public/file localclone/file
'

test_expect_success 'create new commit on remote' '
	(cd public &&
	 echo content >>file &&
	 git commit -a -m two &&
	 git push)
'

test_expect_success 'pulling from local repo' '
	(cd localclone && git pull) &&
	test_cmp public/file localclone/file
'

test_expect_success 'pushing to local repo' '
	(cd localclone &&
	echo content >>file &&
	git commit -a -m three &&
	git push) &&
	compare_refs localclone HEAD server HEAD
'

test_expect_success 'fetch new branch' '
	(cd public &&
	 git checkout -b new &&
	 echo content >>file &&
	 git commit -a -m five &&
	 git push origin new
	) &&
	(cd localclone &&
	 git fetch origin new
	) &&
	compare_refs public HEAD localclone FETCH_HEAD
'

#
# This is only needed because of a bug not detected by this script. It will be
# fixed shortly, but for now lets not cause regressions.
#
test_expect_success 'bump commit in public' '
	(cd public &&
	git checkout master &&
	git pull &&
	echo content >>file &&
	git commit -a -m four &&
	git push) &&
	compare_refs public HEAD server HEAD
'

test_expect_success 'fetch multiple branches' '
	(cd localclone &&
	 git fetch
	) &&
	compare_refs server master localclone refs/remotes/origin/master &&
	compare_refs server new localclone refs/remotes/origin/new
'

test_expect_success 'push when remote has extra refs' '
	(cd localclone &&
	 git reset --hard origin/master &&
	 echo content >>file &&
	 git commit -a -m six &&
	 git push
	) &&
	compare_refs localclone master server master
'

test_expect_success 'push new branch by name' '
	(cd localclone &&
	 git checkout -b new-name  &&
	 echo content >>file &&
	 git commit -a -m seven &&
	 git push origin new-name
	) &&
	compare_refs localclone HEAD server refs/heads/new-name
'

test_expect_failure 'push new branch with old:new refspec' '
	(cd localclone &&
	 git push origin new-name:new-refspec
	) &&
	compare_refs localclone HEAD server refs/heads/new-refspec
'

test_done