Git fork
at reftables-rust 255 lines 6.4 kB view raw
1#!/bin/sh 2 3test_description='pull options' 4 5GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 6export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 7 8. ./test-lib.sh 9 10test_expect_success 'setup' ' 11 mkdir parent && 12 (cd parent && git init && 13 echo one >file && git add file && 14 git commit -m one) 15' 16 17test_expect_success 'git pull -q --no-rebase' ' 18 mkdir clonedq && 19 (cd clonedq && git init && 20 git pull -q --no-rebase "../parent" >out 2>err && 21 test_must_be_empty err && 22 test_must_be_empty out) 23' 24 25test_expect_success 'git pull -q --rebase' ' 26 mkdir clonedqrb && 27 (cd clonedqrb && git init && 28 git pull -q --rebase "../parent" >out 2>err && 29 test_must_be_empty err && 30 test_must_be_empty out && 31 git pull -q --rebase "../parent" >out 2>err && 32 test_must_be_empty err && 33 test_must_be_empty out) 34' 35 36test_expect_success 'git pull --no-rebase' ' 37 mkdir cloned && 38 (cd cloned && git init && 39 git pull --no-rebase "../parent" >out 2>err && 40 test -s err && 41 test_must_be_empty out) 42' 43 44test_expect_success 'git pull --rebase' ' 45 mkdir clonedrb && 46 (cd clonedrb && git init && 47 git pull --rebase "../parent" >out 2>err && 48 test -s err && 49 test_must_be_empty out) 50' 51 52test_expect_success 'git pull -v --no-rebase' ' 53 mkdir clonedv && 54 (cd clonedv && git init && 55 git pull -v --no-rebase "../parent" >out 2>err && 56 test -s err && 57 test_must_be_empty out) 58' 59 60test_expect_success 'git pull -v --rebase' ' 61 mkdir clonedvrb && 62 (cd clonedvrb && git init && 63 git pull -v --rebase "../parent" >out 2>err && 64 test -s err && 65 test_must_be_empty out) 66' 67 68test_expect_success 'git pull -v -q --no-rebase' ' 69 mkdir clonedvq && 70 (cd clonedvq && git init && 71 git pull -v -q --no-rebase "../parent" >out 2>err && 72 test_must_be_empty out && 73 test_must_be_empty err) 74' 75 76test_expect_success 'git pull -q -v --no-rebase' ' 77 mkdir clonedqv && 78 (cd clonedqv && git init && 79 git pull -q -v --no-rebase "../parent" >out 2>err && 80 test_must_be_empty out && 81 test -s err) 82' 83test_expect_success 'git pull --cleanup errors early on invalid argument' ' 84 mkdir clonedcleanup && 85 (cd clonedcleanup && git init && 86 test_must_fail git pull --no-rebase --cleanup invalid "../parent" >out 2>err && 87 test_must_be_empty out && 88 test -s err) 89' 90 91test_expect_success 'git pull --no-write-fetch-head fails' ' 92 mkdir clonedwfh && 93 (cd clonedwfh && git init && 94 test_expect_code 129 git pull --no-write-fetch-head "../parent" >out 2>err && 95 test_must_be_empty out && 96 test_grep "no-write-fetch-head" err) 97' 98 99test_expect_success 'git pull --force' ' 100 mkdir clonedoldstyle && 101 (cd clonedoldstyle && git init && 102 cat >>.git/config <<-\EOF && 103 [remote "one"] 104 url = ../parent 105 fetch = refs/heads/main:refs/heads/mirror 106 [remote "two"] 107 url = ../parent 108 fetch = refs/heads/main:refs/heads/origin 109 [branch "main"] 110 remote = two 111 merge = refs/heads/main 112 EOF 113 git pull two && 114 test_commit A && 115 git branch -f origin && 116 git pull --no-rebase --all --force 117 ) 118' 119 120test_expect_success 'git pull --all' ' 121 mkdir clonedmulti && 122 (cd clonedmulti && git init && 123 cat >>.git/config <<-\EOF && 124 [remote "one"] 125 url = ../parent 126 fetch = refs/heads/*:refs/remotes/one/* 127 [remote "two"] 128 url = ../parent 129 fetch = refs/heads/*:refs/remotes/two/* 130 [branch "main"] 131 remote = one 132 merge = refs/heads/main 133 EOF 134 git pull --all 135 ) 136' 137 138test_expect_success 'git pull --dry-run' ' 139 test_when_finished "rm -rf clonedry" && 140 git init clonedry && 141 ( 142 cd clonedry && 143 git pull --dry-run ../parent && 144 test_path_is_missing .git/FETCH_HEAD && 145 test_ref_missing refs/heads/main && 146 test_path_is_missing .git/index && 147 test_path_is_missing file 148 ) 149' 150 151test_expect_success 'git pull --all --dry-run' ' 152 test_when_finished "rm -rf cloneddry" && 153 git init clonedry && 154 ( 155 cd clonedry && 156 git remote add origin ../parent && 157 git pull --all --dry-run && 158 test_path_is_missing .git/FETCH_HEAD && 159 test_ref_missing refs/remotes/origin/main && 160 test_path_is_missing .git/index && 161 test_path_is_missing file 162 ) 163' 164 165test_expect_success 'git pull --allow-unrelated-histories' ' 166 test_when_finished "rm -fr src dst" && 167 git init src && 168 ( 169 cd src && 170 test_commit one && 171 test_commit two 172 ) && 173 git clone src dst && 174 ( 175 cd src && 176 git checkout --orphan side HEAD^ && 177 test_commit three 178 ) && 179 ( 180 cd dst && 181 test_must_fail git pull ../src side && 182 git pull --no-rebase --allow-unrelated-histories ../src side 183 ) 184' 185 186test_expect_success 'git pull does not add a sign-off line' ' 187 test_when_finished "rm -fr src dst actual" && 188 git init src && 189 test_commit -C src one && 190 git clone src dst && 191 test_commit -C src two && 192 git -C dst pull --no-ff && 193 git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && 194 test_must_be_empty actual 195' 196 197test_expect_success 'git pull --no-signoff does not add sign-off line' ' 198 test_when_finished "rm -fr src dst actual" && 199 git init src && 200 test_commit -C src one && 201 git clone src dst && 202 test_commit -C src two && 203 git -C dst pull --no-signoff --no-ff && 204 git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && 205 test_must_be_empty actual 206' 207 208test_expect_success 'git pull --signoff add a sign-off line' ' 209 test_when_finished "rm -fr src dst expected actual" && 210 echo "Signed-off-by: $GIT_COMMITTER_NAME <$GIT_COMMITTER_EMAIL>" >expected && 211 git init src && 212 test_commit -C src one && 213 git clone src dst && 214 test_commit -C src two && 215 git -C dst pull --signoff --no-ff && 216 git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && 217 test_cmp expected actual 218' 219 220test_expect_success 'git pull --no-signoff flag cancels --signoff flag' ' 221 test_when_finished "rm -fr src dst actual" && 222 git init src && 223 test_commit -C src one && 224 git clone src dst && 225 test_commit -C src two && 226 git -C dst pull --signoff --no-signoff --no-ff && 227 git -C dst show -s --pretty="format:%(trailers)" HEAD >actual && 228 test_must_be_empty actual 229' 230 231test_expect_success 'git pull --no-verify flag passed to merge' ' 232 test_when_finished "rm -fr src dst actual" && 233 git init src && 234 test_commit -C src one && 235 git clone src dst && 236 test_hook -C dst commit-msg <<-\EOF && 237 false 238 EOF 239 test_commit -C src two && 240 git -C dst pull --no-ff --no-verify 241' 242 243test_expect_success 'git pull --no-verify --verify passed to merge' ' 244 test_when_finished "rm -fr src dst actual" && 245 git init src && 246 test_commit -C src one && 247 git clone src dst && 248 test_hook -C dst commit-msg <<-\EOF && 249 false 250 EOF 251 test_commit -C src two && 252 test_must_fail git -C dst pull --no-ff --no-verify --verify 253' 254 255test_done