Git fork
5
fork

Configure Feed

Select the types of activity you want to include in your feed.

at reftables-rust 291 lines 9.1 kB view raw
1#!/bin/sh 2 3test_description='pushing to a repository using push options' 4 5GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main 6export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME 7 8GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB=1 9export GIT_TEST_FATAL_REGISTER_SUBMODULE_ODB 10 11. ./test-lib.sh 12 13mk_repo_pair () { 14 rm -rf workbench upstream && 15 test_create_repo upstream && 16 test_create_repo workbench && 17 ( 18 cd upstream && 19 git config receive.denyCurrentBranch warn && 20 mkdir -p .git/hooks && 21 cat >.git/hooks/pre-receive <<-'EOF' && 22 #!/bin/sh 23 if test -n "$GIT_PUSH_OPTION_COUNT"; then 24 i=0 25 >hooks/pre-receive.push_options 26 while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do 27 eval "value=\$GIT_PUSH_OPTION_$i" 28 echo $value >>hooks/pre-receive.push_options 29 i=$((i + 1)) 30 done 31 fi 32 EOF 33 chmod u+x .git/hooks/pre-receive 34 35 cat >.git/hooks/post-receive <<-'EOF' && 36 #!/bin/sh 37 if test -n "$GIT_PUSH_OPTION_COUNT"; then 38 i=0 39 >hooks/post-receive.push_options 40 while test "$i" -lt "$GIT_PUSH_OPTION_COUNT"; do 41 eval "value=\$GIT_PUSH_OPTION_$i" 42 echo $value >>hooks/post-receive.push_options 43 i=$((i + 1)) 44 done 45 fi 46 EOF 47 chmod u+x .git/hooks/post-receive 48 ) && 49 ( 50 cd workbench && 51 git remote add up ../upstream 52 ) 53} 54 55# Compare the ref ($1) in upstream with a ref value from workbench ($2) 56# i.e. test_refs second HEAD@{2} 57test_refs () { 58 test $# = 2 && 59 git -C upstream rev-parse --verify "$1" >expect && 60 git -C workbench rev-parse --verify "$2" >actual && 61 test_cmp expect actual 62} 63 64test_expect_success 'one push option works for a single branch' ' 65 mk_repo_pair && 66 git -C upstream config receive.advertisePushOptions true && 67 ( 68 cd workbench && 69 test_commit one && 70 git push --mirror up && 71 test_commit two && 72 git push --push-option=asdf up main 73 ) && 74 test_refs main main && 75 echo "asdf" >expect && 76 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 77 test_cmp expect upstream/.git/hooks/post-receive.push_options 78' 79 80test_expect_success 'push option denied by remote' ' 81 mk_repo_pair && 82 git -C upstream config receive.advertisePushOptions false && 83 ( 84 cd workbench && 85 test_commit one && 86 git push --mirror up && 87 test_commit two && 88 test_must_fail git push --push-option=asdf up main 89 ) && 90 test_refs main HEAD@{1} 91' 92 93test_expect_success 'two push options work' ' 94 mk_repo_pair && 95 git -C upstream config receive.advertisePushOptions true && 96 ( 97 cd workbench && 98 test_commit one && 99 git push --mirror up && 100 test_commit two && 101 git push --push-option=asdf --push-option="more structured text" up main 102 ) && 103 test_refs main main && 104 printf "asdf\nmore structured text\n" >expect && 105 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 106 test_cmp expect upstream/.git/hooks/post-receive.push_options 107' 108 109test_expect_success 'push options and submodules' ' 110 test_when_finished "rm -rf parent" && 111 test_when_finished "rm -rf parent_upstream" && 112 mk_repo_pair && 113 git -C upstream config receive.advertisePushOptions true && 114 cp -r upstream parent_upstream && 115 test_commit -C upstream one && 116 117 test_create_repo parent && 118 git -C parent remote add up ../parent_upstream && 119 test_commit -C parent one && 120 git -C parent push --mirror up && 121 122 test_config_global protocol.file.allow always && 123 git -C parent submodule add ../upstream workbench && 124 git -C parent/workbench remote add up ../../upstream && 125 git -C parent commit -m "add submodule" && 126 127 test_commit -C parent/workbench two && 128 git -C parent add workbench && 129 git -C parent commit -m "update workbench" && 130 131 git -C parent push \ 132 --push-option=asdf --push-option="more structured text" \ 133 --recurse-submodules=on-demand up main && 134 135 git -C upstream rev-parse --verify main >expect && 136 git -C parent/workbench rev-parse --verify main >actual && 137 test_cmp expect actual && 138 139 git -C parent_upstream rev-parse --verify main >expect && 140 git -C parent rev-parse --verify main >actual && 141 test_cmp expect actual && 142 143 printf "asdf\nmore structured text\n" >expect && 144 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 145 test_cmp expect upstream/.git/hooks/post-receive.push_options && 146 test_cmp expect parent_upstream/.git/hooks/pre-receive.push_options && 147 test_cmp expect parent_upstream/.git/hooks/post-receive.push_options 148' 149 150test_expect_success 'default push option' ' 151 mk_repo_pair && 152 git -C upstream config receive.advertisePushOptions true && 153 ( 154 cd workbench && 155 test_commit one && 156 git push --mirror up && 157 test_commit two && 158 git -c push.pushOption=default push up main 159 ) && 160 test_refs main main && 161 echo "default" >expect && 162 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 163 test_cmp expect upstream/.git/hooks/post-receive.push_options 164' 165 166test_expect_success 'two default push options' ' 167 mk_repo_pair && 168 git -C upstream config receive.advertisePushOptions true && 169 ( 170 cd workbench && 171 test_commit one && 172 git push --mirror up && 173 test_commit two && 174 git -c push.pushOption=default1 -c push.pushOption=default2 push up main 175 ) && 176 test_refs main main && 177 printf "default1\ndefault2\n" >expect && 178 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 179 test_cmp expect upstream/.git/hooks/post-receive.push_options 180' 181 182test_expect_success 'push option from command line overrides from-config push option' ' 183 mk_repo_pair && 184 git -C upstream config receive.advertisePushOptions true && 185 ( 186 cd workbench && 187 test_commit one && 188 git push --mirror up && 189 test_commit two && 190 git -c push.pushOption=default push --push-option=manual up main 191 ) && 192 test_refs main main && 193 echo "manual" >expect && 194 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 195 test_cmp expect upstream/.git/hooks/post-receive.push_options 196' 197 198test_expect_success 'empty value of push.pushOption in config clears the list' ' 199 mk_repo_pair && 200 git -C upstream config receive.advertisePushOptions true && 201 ( 202 cd workbench && 203 test_commit one && 204 git push --mirror up && 205 test_commit two && 206 git -c push.pushOption=default1 -c push.pushOption= -c push.pushOption=default2 push up main 207 ) && 208 test_refs main main && 209 echo "default2" >expect && 210 test_cmp expect upstream/.git/hooks/pre-receive.push_options && 211 test_cmp expect upstream/.git/hooks/post-receive.push_options 212' 213 214test_expect_success 'invalid push option in config' ' 215 mk_repo_pair && 216 git -C upstream config receive.advertisePushOptions true && 217 ( 218 cd workbench && 219 test_commit one && 220 git push --mirror up && 221 test_commit two && 222 test_must_fail git -c push.pushOption push up main 223 ) && 224 test_refs main HEAD@{1} 225' 226 227test_expect_success 'push options keep quoted characters intact (direct)' ' 228 mk_repo_pair && 229 git -C upstream config receive.advertisePushOptions true && 230 test_commit -C workbench one && 231 git -C workbench push --push-option="\"embedded quotes\"" up main && 232 echo "\"embedded quotes\"" >expect && 233 test_cmp expect upstream/.git/hooks/pre-receive.push_options 234' 235 236. "$TEST_DIRECTORY"/lib-httpd.sh 237start_httpd 238 239# set up http repository for fetching/pushing, with push options config 240# bool set to $1 241mk_http_pair () { 242 test_when_finished "rm -rf test_http_clone" && 243 test_when_finished 'rm -rf "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git' && 244 mk_repo_pair && 245 git -C upstream config receive.advertisePushOptions "$1" && 246 git -C upstream config http.receivepack true && 247 cp -R upstream/.git "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git && 248 git clone "$HTTPD_URL"/smart/upstream test_http_clone 249} 250 251test_expect_success 'push option denied properly by http server' ' 252 mk_http_pair false && 253 test_commit -C test_http_clone one && 254 test_must_fail git -C test_http_clone push --push-option=asdf origin main 2>actual && 255 test_grep "the receiving end does not support push options" actual && 256 git -C test_http_clone push origin main 257' 258 259test_expect_success 'push options work properly across http' ' 260 mk_http_pair true && 261 262 test_commit -C test_http_clone one && 263 git -C test_http_clone push origin main && 264 git -C "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git rev-parse --verify main >expect && 265 git -C test_http_clone rev-parse --verify main >actual && 266 test_cmp expect actual && 267 268 test_commit -C test_http_clone two && 269 git -C test_http_clone push --push-option=asdf --push-option="more structured text" origin main && 270 printf "asdf\nmore structured text\n" >expect && 271 test_cmp expect "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git/hooks/pre-receive.push_options && 272 test_cmp expect "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git/hooks/post-receive.push_options && 273 274 git -C "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git rev-parse --verify main >expect && 275 git -C test_http_clone rev-parse --verify main >actual && 276 test_cmp expect actual 277' 278 279test_expect_success 'push options keep quoted characters intact (http)' ' 280 mk_http_pair true && 281 282 test_commit -C test_http_clone one && 283 git -C test_http_clone push --push-option="\"embedded quotes\"" origin main && 284 echo "\"embedded quotes\"" >expect && 285 test_cmp expect "$HTTPD_DOCUMENT_ROOT_PATH"/upstream.git/hooks/pre-receive.push_options 286' 287 288# DO NOT add non-httpd-specific tests here, because the last part of this 289# test script is only executed when httpd is available and enabled. 290 291test_done