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