| #!/bin/sh | 
 |  | 
 | test_description='fetch --all works correctly' | 
 |  | 
 | . ./test-lib.sh | 
 |  | 
 | setup_repository () { | 
 | 	mkdir "$1" && ( | 
 | 	cd "$1" && | 
 | 	git init && | 
 | 	>file && | 
 | 	git add file && | 
 | 	test_tick && | 
 | 	git commit -m "Initial" && | 
 | 	git checkout -b side && | 
 | 	>elif && | 
 | 	git add elif && | 
 | 	test_tick && | 
 | 	git commit -m "Second" && | 
 | 	git checkout master | 
 | 	) | 
 | } | 
 |  | 
 | test_expect_success setup ' | 
 | 	setup_repository one && | 
 | 	setup_repository two && | 
 | 	( | 
 | 		cd two && git branch another | 
 | 	) && | 
 | 	git clone --mirror two three && | 
 | 	git clone one test | 
 | ' | 
 |  | 
 | cat > test/expect << EOF | 
 |   one/master | 
 |   one/side | 
 |   origin/HEAD -> origin/master | 
 |   origin/master | 
 |   origin/side | 
 |   three/another | 
 |   three/master | 
 |   three/side | 
 |   two/another | 
 |   two/master | 
 |   two/side | 
 | EOF | 
 |  | 
 | test_expect_success 'git fetch --all' ' | 
 | 	(cd test && | 
 | 	 git remote add one ../one && | 
 | 	 git remote add two ../two && | 
 | 	 git remote add three ../three && | 
 | 	 git fetch --all && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp expect output) | 
 | ' | 
 |  | 
 | test_expect_success 'git fetch --all should continue if a remote has errors' ' | 
 | 	(git clone one test2 && | 
 | 	 cd test2 && | 
 | 	 git remote add bad ../non-existing && | 
 | 	 git remote add one ../one && | 
 | 	 git remote add two ../two && | 
 | 	 git remote add three ../three && | 
 | 	 test_must_fail git fetch --all && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp ../test/expect output) | 
 | ' | 
 |  | 
 | test_expect_success 'git fetch --all does not allow non-option arguments' ' | 
 | 	(cd test && | 
 | 	 test_must_fail git fetch --all origin && | 
 | 	 test_must_fail git fetch --all origin master) | 
 | ' | 
 |  | 
 | cat > expect << EOF | 
 |   origin/HEAD -> origin/master | 
 |   origin/master | 
 |   origin/side | 
 |   three/another | 
 |   three/master | 
 |   three/side | 
 | EOF | 
 |  | 
 | test_expect_success 'git fetch --multiple (but only one remote)' ' | 
 | 	(git clone one test3 && | 
 | 	 cd test3 && | 
 | 	 git remote add three ../three && | 
 | 	 git fetch --multiple three && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp ../expect output) | 
 | ' | 
 |  | 
 | cat > expect << EOF | 
 |   one/master | 
 |   one/side | 
 |   two/another | 
 |   two/master | 
 |   two/side | 
 | EOF | 
 |  | 
 | test_expect_success 'git fetch --multiple (two remotes)' ' | 
 | 	(git clone one test4 && | 
 | 	 cd test4 && | 
 | 	 git remote rm origin && | 
 | 	 git remote add one ../one && | 
 | 	 git remote add two ../two && | 
 | 	 git fetch --multiple one two && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp ../expect output) | 
 | ' | 
 |  | 
 | test_expect_success 'git fetch --multiple (bad remote names)' ' | 
 | 	(cd test4 && | 
 | 	 test_must_fail git fetch --multiple four) | 
 | ' | 
 |  | 
 |  | 
 | test_expect_success 'git fetch --all (skipFetchAll)' ' | 
 | 	(cd test4 && | 
 | 	 for b in $(git branch -r) | 
 | 	 do | 
 | 		git branch -r -d $b || break | 
 | 	 done && | 
 | 	 git remote add three ../three && | 
 | 	 git config remote.three.skipFetchAll true && | 
 | 	 git fetch --all && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp ../expect output) | 
 | ' | 
 |  | 
 | cat > expect << EOF | 
 |   one/master | 
 |   one/side | 
 |   three/another | 
 |   three/master | 
 |   three/side | 
 |   two/another | 
 |   two/master | 
 |   two/side | 
 | EOF | 
 |  | 
 | test_expect_success 'git fetch --multiple (ignoring skipFetchAll)' ' | 
 | 	(cd test4 && | 
 | 	 for b in $(git branch -r) | 
 | 	 do | 
 | 		git branch -r -d $b || break | 
 | 	 done && | 
 | 	 git fetch --multiple one two three && | 
 | 	 git branch -r > output && | 
 | 	 test_cmp ../expect output) | 
 | ' | 
 |  | 
 | test_expect_success 'git fetch --all --no-tags' ' | 
 | 	>expect && | 
 | 	git clone one test5 && | 
 | 	git clone test5 test6 && | 
 | 	(cd test5 && git tag test-tag) && | 
 | 	( | 
 | 		cd test6 && | 
 | 		git fetch --all --no-tags && | 
 | 		git tag >output | 
 | 	) && | 
 | 	test_cmp expect test6/output | 
 | ' | 
 |  | 
 | test_expect_success 'git fetch --all --tags' ' | 
 | 	echo test-tag >expect && | 
 | 	git clone one test7 && | 
 | 	git clone test7 test8 && | 
 | 	( | 
 | 		cd test7 && | 
 | 		test_commit test-tag && | 
 | 		git reset --hard HEAD^ | 
 | 	) && | 
 | 	( | 
 | 		cd test8 && | 
 | 		git fetch --all --tags && | 
 | 		git tag >output | 
 | 	) && | 
 | 	test_cmp expect test8/output | 
 | ' | 
 |  | 
 | test_done |