|  | #!/bin/sh | 
|  |  | 
|  | test_description='git remote group handling' | 
|  | . ./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 master one one && | 
|  | git remote add -m master 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_done |