You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
197 lines
3.9 KiB
197 lines
3.9 KiB
#!/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_TRACE=1 git fetch --multiple one two 2>trace && |
|
git branch -r > output && |
|
test_cmp ../expect output && |
|
grep "built-in: git maintenance" trace >gc && |
|
test_line_count = 1 gc |
|
) |
|
' |
|
|
|
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 || exit 1 |
|
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 || exit 1 |
|
done && |
|
git fetch --multiple one two three && |
|
git branch -r > output && |
|
test_cmp ../expect output) |
|
' |
|
|
|
test_expect_success 'git fetch --all --no-tags' ' |
|
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_must_be_empty 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_expect_success 'parallel' ' |
|
git remote add one ./bogus1 && |
|
git remote add two ./bogus2 && |
|
|
|
test_must_fail env GIT_TRACE="$PWD/trace" \ |
|
git fetch --jobs=2 --multiple one two 2>err && |
|
grep "preparing to run up to 2 tasks" trace && |
|
test_i18ngrep "could not fetch .one.*128" err && |
|
test_i18ngrep "could not fetch .two.*128" err |
|
' |
|
|
|
test_done
|
|
|