t5510-fetch.sh 6.4 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/bin/sh
# Copyright (c) 2006, Junio C Hamano.

test_description='Per branch config variables affects "git fetch".

'

. ./test-lib.sh

D=`pwd`

test_expect_success setup '
	echo >file original &&
	git add file &&
	git commit -a -m original'

test_expect_success "clone and setup child repos" '
	git clone . one &&
	cd one &&
	echo >file updated by one &&
	git commit -a -m "updated by one" &&
	cd .. &&
	git clone . two &&
	cd two &&
25 26 27
	git config branch.master.remote one &&
	git config remote.one.url ../one/.git/ &&
	git config remote.one.fetch refs/heads/master:refs/heads/one &&
28 29 30
	cd .. &&
	git clone . three &&
	cd three &&
31 32
	git config branch.master.remote two &&
	git config branch.master.merge refs/heads/one &&
33
	mkdir -p .git/remotes &&
34 35 36 37
	{
		echo "URL: ../two/.git/"
		echo "Pull: refs/heads/master:refs/heads/two"
		echo "Pull: refs/heads/one:refs/heads/one"
38 39 40
	} >.git/remotes/two &&
	cd .. &&
	git clone . bundle
41 42 43 44 45 46 47 48 49 50 51 52 53 54
'

test_expect_success "fetch test" '
	cd "$D" &&
	echo >file updated by origin &&
	git commit -a -m "updated by origin" &&
	cd two &&
	git fetch &&
	test -f .git/refs/heads/one &&
	mine=`git rev-parse refs/heads/one` &&
	his=`cd ../one && git rev-parse refs/heads/master` &&
	test "z$mine" = "z$his"
'

55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
test_expect_success "fetch test for-merge" '
	cd "$D" &&
	cd three &&
	git fetch &&
	test -f .git/refs/heads/two &&
	test -f .git/refs/heads/one &&
	master_in_two=`cd ../two && git rev-parse master` &&
	one_in_two=`cd ../two && git rev-parse one` &&
	{
		echo "$master_in_two	not-for-merge"
		echo "$one_in_two	"
	} >expected &&
	cut -f -2 .git/FETCH_HEAD >actual &&
	diff expected actual'

70 71 72 73 74 75 76 77 78 79 80 81
test_expect_success 'fetch tags when there is no tags' '

    cd "$D" &&

    mkdir notags &&
    cd notags &&
    git init &&

    git fetch -t ..

'

82 83 84 85 86 87 88 89
test_expect_success 'fetch following tags' '

	cd "$D" &&
	git tag -a -m 'annotated' anno HEAD &&
	git tag light HEAD &&

	mkdir four &&
	cd four &&
90
	git init &&
91 92 93 94 95 96 97

	git fetch .. :track &&
	git show-ref --verify refs/tags/anno &&
	git show-ref --verify refs/tags/light

'

J
Junio C Hamano 已提交
98
test_expect_success 'fetch must not resolve short tag name' '
99 100 101 102 103 104 105

	cd "$D" &&

	mkdir five &&
	cd five &&
	git init &&

J
Junio C Hamano 已提交
106
	! git fetch .. anno:five
107 108 109

'

J
Junio C Hamano 已提交
110
test_expect_success 'fetch must not resolve short remote name' '
111 112 113 114 115 116 117 118

	cd "$D" &&
	git-update-ref refs/remotes/six/HEAD HEAD

	mkdir six &&
	cd six &&
	git init &&

J
Junio C Hamano 已提交
119
	! git fetch .. six:six
120 121 122

'

123 124 125 126 127 128 129
test_expect_success 'create bundle 1' '
	cd "$D" &&
	echo >file updated again by origin &&
	git commit -a -m "tip" &&
	git bundle create bundle1 master^..master
'

130 131 132 133 134 135 136
test_expect_success 'header of bundle looks right' '
	head -n 1 "$D"/bundle1 | grep "^#" &&
	head -n 2 "$D"/bundle1 | grep "^-[0-9a-f]\{40\} " &&
	head -n 3 "$D"/bundle1 | grep "^[0-9a-f]\{40\} " &&
	head -n 4 "$D"/bundle1 | grep "^$"
'

137 138 139 140 141
test_expect_success 'create bundle 2' '
	cd "$D" &&
	git bundle create bundle2 master~2..master
'

J
Junio C Hamano 已提交
142
test_expect_success 'unbundle 1' '
143 144
	cd "$D/bundle" &&
	git checkout -b some-branch &&
J
Junio C Hamano 已提交
145
	! git fetch "$D/bundle1" master:master
146 147
'

148 149 150 151 152 153 154 155 156 157 158 159 160 161
test_expect_success 'bundle 1 has only 3 files ' '
	cd "$D" &&
	(
		while read x && test -n "$x"
		do
			:;
		done
		cat
	) <bundle1 >bundle.pack &&
	git index-pack bundle.pack &&
	verify=$(git verify-pack -v bundle.pack) &&
	test 4 = $(echo "$verify" | wc -l)
'

162 163 164 165 166 167
test_expect_success 'unbundle 2' '
	cd "$D/bundle" &&
	git fetch ../bundle2 master:master &&
	test "tip" = "$(git log -1 --pretty=oneline master | cut -b42-)"
'

168 169 170 171 172 173
test_expect_success 'bundle does not prerequisite objects' '
	cd "$D" &&
	touch file2 &&
	git add file2 &&
	git commit -m add.file2 file2 &&
	git bundle create bundle3 -1 HEAD &&
S
Shawn O. Pearce 已提交
174 175 176 177 178 179 180
	(
		while read x && test -n "$x"
		do
			:;
		done
		cat
	) <bundle3 >bundle.pack &&
181 182 183 184
	git index-pack bundle.pack &&
	test 4 = $(git verify-pack -v bundle.pack | wc -l)
'

185 186 187 188 189 190 191 192
test_expect_success 'bundle should be able to create a full history' '

	cd "$D" &&
	git tag -a -m '1.0' v1.0 master &&
	git bundle create bundle4 v1.0

'

193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227
test "$TEST_RSYNC" && {
test_expect_success 'fetch via rsync' '
	git pack-refs &&
	mkdir rsynced &&
	cd rsynced &&
	git init &&
	git fetch rsync://127.0.0.1$(pwd)/../.git master:refs/heads/master &&
	git gc --prune &&
	test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
	git fsck --full
'

test_expect_success 'push via rsync' '
	mkdir ../rsynced2 &&
	(cd ../rsynced2 &&
	 git init) &&
	git push rsync://127.0.0.1$(pwd)/../rsynced2/.git master &&
	cd ../rsynced2 &&
	git gc --prune &&
	test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
	git fsck --full
'

test_expect_success 'push via rsync' '
	cd .. &&
	mkdir rsynced3 &&
	(cd rsynced3 &&
	 git init) &&
	git push --all rsync://127.0.0.1$(pwd)/rsynced3/.git &&
	cd rsynced3 &&
	test $(git rev-parse master) = $(cd .. && git rev-parse master) &&
	git fsck --full
'
}

228 229 230 231 232 233 234 235
test_expect_success 'fetch with a non-applying branch.<name>.merge' '
	git config branch.master.remote yeti &&
	git config branch.master.merge refs/heads/bigfoot &&
	git config remote.blub.url one &&
	git config remote.blub.fetch "refs/heads/*:refs/remotes/one/*" &&
	git fetch blub
'

236 237 238 239 240 241 242
# the strange name is: a\!'b
test_expect_success 'quoting of a strangely named repo' '
	! git fetch "a\\!'\''b" > result 2>&1 &&
	cat result &&
	grep "fatal: '\''a\\\\!'\''b'\''" result
'

243 244 245 246 247 248 249 250 251 252 253 254 255
test_expect_success 'bundle should record HEAD correctly' '

	cd "$D" &&
	git bundle create bundle5 HEAD master &&
	git bundle list-heads bundle5 >actual &&
	for h in HEAD refs/heads/master
	do
		echo "$(git rev-parse --verify $h) $h"
	done >expect &&
	diff -u expect actual

'

256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297
test_expect_success 'explicit fetch should not update tracking' '

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		o=$(git rev-parse --verify refs/remotes/origin/master) &&
		git fetch origin master &&
		n=$(git rev-parse --verify refs/remotes/origin/master) &&
		test "$o" = "$n" &&
		! git rev-parse --verify refs/remotes/origin/side
	)
'

test_expect_success 'explicit pull should not update tracking' '

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		o=$(git rev-parse --verify refs/remotes/origin/master) &&
		git pull origin master &&
		n=$(git rev-parse --verify refs/remotes/origin/master) &&
		test "$o" = "$n" &&
		! git rev-parse --verify refs/remotes/origin/side
	)
'

test_expect_success 'configured fetch updates tracking' '

	cd "$D" &&
	git branch -f side &&
	(
		cd three &&
		o=$(git rev-parse --verify refs/remotes/origin/master) &&
		git fetch origin &&
		n=$(git rev-parse --verify refs/remotes/origin/master) &&
		test "$o" != "$n" &&
		git rev-parse --verify refs/remotes/origin/side
	)
'

298
test_done