| #!/bin/sh | 
 |  | 
 | test_description='ext::cmd remote "connect" helper' | 
 | . ./test-lib.sh | 
 |  | 
 | test_expect_success setup ' | 
 | 	git config --global protocol.ext.allow user && | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m initial && | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m second && | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m third && | 
 | 	test_tick && | 
 | 	git tag -a -m "tip three" three && | 
 |  | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m fourth | 
 | ' | 
 |  | 
 | test_expect_success clone ' | 
 | 	cmd=$(echo "echo >&2 ext::sh invoked && %S .." | sed -e "s/ /% /g") && | 
 | 	git clone "ext::sh -c %S% ." dst && | 
 | 	git for-each-ref refs/heads/ refs/tags/ >expect && | 
 | 	( | 
 | 		cd dst && | 
 | 		git config remote.origin.url "ext::sh -c $cmd" && | 
 | 		git for-each-ref refs/heads/ refs/tags/ | 
 | 	) >actual && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'update following tag' ' | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m fifth && | 
 | 	test_tick && | 
 | 	git tag -a -m "tip five" five && | 
 | 	git for-each-ref refs/heads/ refs/tags/ >expect && | 
 | 	( | 
 | 		cd dst && | 
 | 		git pull && | 
 | 		git for-each-ref refs/heads/ refs/tags/ >../actual | 
 | 	) && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'update backfilled tag' ' | 
 | 	test_tick && | 
 | 	git commit --allow-empty -m sixth && | 
 | 	test_tick && | 
 | 	git tag -a -m "tip two" two three^1 && | 
 | 	git for-each-ref refs/heads/ refs/tags/ >expect && | 
 | 	( | 
 | 		cd dst && | 
 | 		git pull && | 
 | 		git for-each-ref refs/heads/ refs/tags/ >../actual | 
 | 	) && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 | test_expect_success 'update backfilled tag without primary transfer' ' | 
 | 	test_tick && | 
 | 	git tag -a -m "tip one " one two^1 && | 
 | 	git for-each-ref refs/heads/ refs/tags/ >expect && | 
 | 	( | 
 | 		cd dst && | 
 | 		git pull && | 
 | 		git for-each-ref refs/heads/ refs/tags/ >../actual | 
 | 	) && | 
 | 	test_cmp expect actual | 
 | ' | 
 |  | 
 |  | 
 | test_expect_success 'set up fake git-daemon' ' | 
 | 	mkdir remote && | 
 | 	git init --bare remote/one.git && | 
 | 	mkdir remote/host && | 
 | 	git init --bare remote/host/two.git && | 
 | 	write_script fake-daemon <<-\EOF && | 
 | 	git daemon --inetd \ | 
 | 		--informative-errors \ | 
 | 		--export-all \ | 
 | 		--base-path="$TRASH_DIRECTORY/remote" \ | 
 | 		--interpolated-path="$TRASH_DIRECTORY/remote/%H%D" \ | 
 | 		"$TRASH_DIRECTORY/remote" | 
 | 	EOF | 
 | 	export TRASH_DIRECTORY && | 
 | 	PATH=$TRASH_DIRECTORY:$PATH | 
 | ' | 
 |  | 
 | test_expect_success 'ext command can connect to git daemon (no vhost)' ' | 
 | 	rm -rf dst && | 
 | 	git clone "ext::fake-daemon %G/one.git" dst | 
 | ' | 
 |  | 
 | test_expect_success 'ext command can connect to git daemon (vhost)' ' | 
 | 	rm -rf dst && | 
 | 	git clone "ext::fake-daemon %G/two.git %Vhost" dst | 
 | ' | 
 |  | 
 | test_done |