Browse Source
* bg/fetch-multi: Re-implement 'git remote update' using 'git fetch' builtin-fetch: add --dry-run option builtin-fetch: add --prune option teach warn_dangling_symref to take a FILE argument remote: refactor some logic into get_stale_heads() Add missing test for 'git remote update --prune' Add the configuration option skipFetchAll Teach the --multiple option to 'git fetch' Teach the --all option to 'git fetch'maint

13 changed files with 492 additions and 115 deletions
@ -0,0 +1,154 @@
@@ -0,0 +1,154 @@
|
||||
#!/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_done |
Loading…
Reference in new issue