| #!/bin/sh |
| |
| test_description='git remote group handling' |
| GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main |
| export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME |
| |
| TEST_PASSES_SANITIZE_LEAK=true |
| . ./test-lib.sh |
| |
| mark() { |
| echo "$1" >mark |
| } |
| |
| update_repo() { |
| (cd $1 && |
| echo content >>file && |
| git add file && |
| git commit -F ../mark) |
| } |
| |
| update_repos() { |
| update_repo one $1 && |
| update_repo two $1 |
| } |
| |
| repo_fetched() { |
| if test "$(git log -1 --pretty=format:%s $1 --)" = "$(cat mark)"; then |
| echo >&2 "repo was fetched: $1" |
| return 0 |
| fi |
| echo >&2 "repo was not fetched: $1" |
| return 1 |
| } |
| |
| test_expect_success 'setup' ' |
| mkdir one && (cd one && git init) && |
| mkdir two && (cd two && git init) && |
| git remote add -m main one one && |
| git remote add -m main two two |
| ' |
| |
| test_expect_success 'no group updates all' ' |
| mark update-all && |
| update_repos && |
| git remote update && |
| repo_fetched one && |
| repo_fetched two |
| ' |
| |
| test_expect_success 'nonexistent group produces error' ' |
| mark nonexistent && |
| update_repos && |
| test_must_fail git remote update nonexistent && |
| ! repo_fetched one && |
| ! repo_fetched two |
| ' |
| |
| test_expect_success 'updating group updates all members (remote update)' ' |
| mark group-all && |
| update_repos && |
| git config --add remotes.all one && |
| git config --add remotes.all two && |
| git remote update all && |
| repo_fetched one && |
| repo_fetched two |
| ' |
| |
| test_expect_success 'updating group updates all members (fetch)' ' |
| mark fetch-group-all && |
| update_repos && |
| git fetch all && |
| repo_fetched one && |
| repo_fetched two |
| ' |
| |
| test_expect_success 'updating group does not update non-members (remote update)' ' |
| mark group-some && |
| update_repos && |
| git config --add remotes.some one && |
| git remote update some && |
| repo_fetched one && |
| ! repo_fetched two |
| ' |
| |
| test_expect_success 'updating group does not update non-members (fetch)' ' |
| mark fetch-group-some && |
| update_repos && |
| git config --add remotes.some one && |
| git remote update some && |
| repo_fetched one && |
| ! repo_fetched two |
| ' |
| |
| test_expect_success 'updating remote name updates that remote' ' |
| mark remote-name && |
| update_repos && |
| git remote update one && |
| repo_fetched one && |
| ! repo_fetched two |
| ' |
| |
| test_expect_success 'updating group in parallel with a duplicate remote does not fail (fetch)' ' |
| mark fetch-group-duplicate && |
| update_repo one && |
| git config --add remotes.duplicate one && |
| git config --add remotes.duplicate one && |
| git -c fetch.parallel=2 remote update duplicate && |
| repo_fetched one |
| ' |
| |
| test_done |