1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178
|
#!/bin/sh
test_description='"git fetch/pull --set-upstream" basic tests.'
. ./test-lib.sh
check_config () {
printf "%s\n" "$2" "$3" >"expect.$1" &&
{
git config "branch.$1.remote" && git config "branch.$1.merge"
} >"actual.$1" &&
test_cmp "expect.$1" "actual.$1"
}
check_config_missing () {
test_expect_code 1 git config "branch.$1.remote" &&
test_expect_code 1 git config "branch.$1.merge"
}
clear_config () {
for branch in "$@"; do
test_might_fail git config --unset-all "branch.$branch.remote"
test_might_fail git config --unset-all "branch.$branch.merge"
done
}
ensure_fresh_upstream () {
rm -rf parent && git init --bare parent
}
test_expect_success 'setup bare parent fetch' '
ensure_fresh_upstream &&
git remote add upstream parent
'
test_expect_success 'setup commit on master and other fetch' '
test_commit one &&
git push upstream master &&
git checkout -b other &&
test_commit two &&
git push upstream other
'
# tests for fetch --set-upstream
test_expect_success 'fetch --set-upstream does not set upstream w/o branch' '
clear_config master other &&
git checkout master &&
git fetch --set-upstream upstream &&
check_config_missing master &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream upstream master sets branch master but not other' '
clear_config master other &&
git fetch --set-upstream upstream master &&
check_config master upstream refs/heads/master &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream upstream other sets branch other' '
clear_config master other &&
git fetch --set-upstream upstream other &&
check_config master upstream refs/heads/other &&
check_config_missing other
'
test_expect_success 'fetch --set-upstream master:other does not set the branch other2' '
clear_config other2 &&
git fetch --set-upstream upstream master:other2 &&
check_config_missing other2
'
test_expect_success 'fetch --set-upstream http://nosuchdomain.example.com fails with invalid url' '
# master explicitly not cleared, we check that it is not touched from previous value
clear_config other other2 &&
test_must_fail git fetch --set-upstream http://nosuchdomain.example.com &&
check_config master upstream refs/heads/other &&
check_config_missing other &&
check_config_missing other2
'
test_expect_success 'fetch --set-upstream with valid URL sets upstream to URL' '
clear_config other other2 &&
url="file://'"$PWD"'" &&
git fetch --set-upstream "$url" &&
check_config master "$url" HEAD &&
check_config_missing other &&
check_config_missing other2
'
# tests for pull --set-upstream
test_expect_success 'setup bare parent pull' '
git remote rm upstream &&
ensure_fresh_upstream &&
git remote add upstream parent
'
test_expect_success 'setup commit on master and other pull' '
test_commit three &&
git push --tags upstream master &&
test_commit four &&
git push upstream other
'
test_expect_success 'pull --set-upstream upstream master sets branch master but not other' '
clear_config master other &&
git pull --set-upstream upstream master &&
check_config master upstream refs/heads/master &&
check_config_missing other
'
test_expect_success 'pull --set-upstream master:other2 does not set the branch other2' '
clear_config other2 &&
git pull --set-upstream upstream master:other2 &&
check_config_missing other2
'
test_expect_success 'pull --set-upstream upstream other sets branch master' '
clear_config master other &&
git pull --set-upstream upstream other &&
check_config master upstream refs/heads/other &&
check_config_missing other
'
test_expect_success 'pull --set-upstream upstream tag does not set the tag' '
clear_config three &&
git pull --tags --set-upstream upstream three &&
check_config_missing three
'
test_expect_success 'pull --set-upstream http://nosuchdomain.example.com fails with invalid url' '
# master explicitly not cleared, we check that it is not touched from previous value
clear_config other other2 three &&
test_must_fail git pull --set-upstream http://nosuchdomain.example.com &&
check_config master upstream refs/heads/other &&
check_config_missing other &&
check_config_missing other2 &&
check_config_missing three
'
test_expect_success 'pull --set-upstream upstream HEAD sets branch HEAD' '
clear_config master other &&
git pull --set-upstream upstream HEAD &&
check_config master upstream HEAD &&
git checkout other &&
git pull --set-upstream upstream HEAD &&
check_config other upstream HEAD
'
test_expect_success 'pull --set-upstream upstream with more than one branch does nothing' '
clear_config master three &&
git pull --set-upstream upstream master three &&
check_config_missing master &&
check_config_missing three
'
test_expect_success 'pull --set-upstream with valid URL sets upstream to URL' '
clear_config master other other2 &&
git checkout master &&
url="file://'"$PWD"'" &&
git pull --set-upstream "$url" &&
check_config master "$url" HEAD &&
check_config_missing other &&
check_config_missing other2
'
test_expect_success 'pull --set-upstream with valid URL and branch sets branch' '
clear_config master other other2 &&
git checkout master &&
url="file://'"$PWD"'" &&
git pull --set-upstream "$url" master &&
check_config master "$url" refs/heads/master &&
check_config_missing other &&
check_config_missing other2
'
test_done
|