(command.CommandList children: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:test_description) op: assign_op.Equal rhs: { (SQ (Token id:Id.Lit_Chars val:'test WebDAV http-push\n' span_id:15) (Token id:Id.Lit_Chars val:'\n' span_id:16) (Token id:Id.Lit_Chars val:'This test runs various sanity checks on http-push.' span_id:17) ) } spids: [13] ) ] ) (C {(.)} {(./test-lib.sh)}) (command.If arms: [ (if_arm cond: [ (command.AndOr ops: [Id.Op_DPipe] children: [ (command.Simple words: [{(git)} {(http-push)}] redirects: [ (redir.Redir op: (Token id:Id.Redir_Great val:'>' span_id:32) fd: -1 arg_word: {(/dev/null)} ) (redir.Redir op: (Token id:Id.Redir_GreatAnd val:'2>&' span_id:36) fd: 2 arg_word: {(1)} ) ] ) (C {(Id.Lit_LBracket '[')} {($ Id.VSub_QMark '$?')} {(-eq)} {(128)} {(Id.Lit_RBracket ']')} ) ] ) ] action: [ (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:skip_all) op: assign_op.Equal rhs: {(DQ ('skipping test, USE_CURL_MULTI is not defined'))} spids: [54] ) ] ) (C {(test_done)}) ] spids: [26 51] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:LIB_HTTPD_DAV) op: assign_op.Equal rhs: {(t)} spids: [65] ) ] ) (C {(.)} {(DQ ($ Id.VSub_DollarName '$TEST_DIRECTORY')) (/lib-httpd.sh)}) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:ROOT_PATH) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$PWD'))} spids: [75] ) ] ) (C {(start_httpd)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'setup remote repository' span_id:86))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:90) (Token id:Id.Lit_Chars val:'\tcd "$ROOT_PATH" &&\n' span_id:91) (Token id:Id.Lit_Chars val:'\tmkdir test_repo &&\n' span_id:92) (Token id:Id.Lit_Chars val:'\tcd test_repo &&\n' span_id:93) (Token id:Id.Lit_Chars val:'\tgit init &&\n' span_id:94) (Token id:Id.Lit_Chars val:'\t: >path1 &&\n' span_id:95) (Token id:Id.Lit_Chars val:'\tgit add path1 &&\n' span_id:96) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:97) (Token id:Id.Lit_Chars val:'\tgit commit -m initial &&\n' span_id:98) (Token id:Id.Lit_Chars val:'\tcd - &&\n' span_id:99) (Token id:Id.Lit_Chars val:'\tgit clone --bare test_repo test_repo.git &&\n' span_id:100) (Token id:Id.Lit_Chars val:'\tcd test_repo.git &&\n' span_id:101) (Token id:Id.Lit_Chars val:'\tgit --bare update-server-info &&\n' span_id:102) (Token id: Id.Lit_Chars val: '\tmv hooks/post-update.sample hooks/post-update &&\n' span_id: 103 ) (Token id:Id.Lit_Chars val:'\tORIG_HEAD=$(git rev-parse --verify HEAD) &&\n' span_id:104) (Token id:Id.Lit_Chars val:'\tcd - &&\n' span_id:105) (Token id:Id.Lit_Chars val:'\tmv test_repo.git "$HTTPD_DOCUMENT_ROOT_PATH"\n' span_id:106) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create password-protected repository' span_id:113))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:117) (Token id: Id.Lit_Chars val: '\tmkdir -p "$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb" &&\n' span_id: 118 ) (Token id:Id.Lit_Chars val:'\tcp -Rf "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git" \\\n' span_id:119) (Token id: Id.Lit_Chars val: '\t "$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git"\n' span_id: 120 ) ) } ) (C {(setup_askpass_helper)}) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'clone remote repository' span_id:130))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:134) (Token id:Id.Lit_Chars val:'\tcd "$ROOT_PATH" &&\n' span_id:135) (Token id:Id.Lit_Chars val:'\tgit clone $HTTPD_URL/dumb/test_repo.git test_repo_clone\n' span_id:136) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'push to remote repository with packed refs' span_id:143))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:147) (Token id:Id.Lit_Chars val:'\tcd "$ROOT_PATH"/test_repo_clone &&\n' span_id:148) (Token id:Id.Lit_Chars val:'\t: >path2 &&\n' span_id:149) (Token id:Id.Lit_Chars val:'\tgit add path2 &&\n' span_id:150) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:151) (Token id:Id.Lit_Chars val:'\tgit commit -m path2 &&\n' span_id:152) (Token id:Id.Lit_Chars val:'\tHEAD=$(git rev-parse --verify HEAD) &&\n' span_id:153) (Token id:Id.Lit_Chars val:'\tgit push &&\n' span_id:154) (Token id:Id.Lit_Chars val:'\t(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&\n' span_id:155) (Token id: Id.Lit_Chars val: '\t test $HEAD = $(git rev-parse --verify HEAD))\n' span_id: 156 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'push already up-to-date' span_id:163))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:167) (Token id:Id.Lit_Chars val:'\tgit push\n' span_id:168) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'push to remote repository with unpacked refs' span_id:175))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:179) (Token id: Id.Lit_Chars val: '\t(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&\n' span_id: 180 ) (Token id:Id.Lit_Chars val:'\t rm packed-refs &&\n' span_id:181) (Token id: Id.Lit_Chars val: '\t git update-ref refs/heads/master $ORIG_HEAD &&\n' span_id: 182 ) (Token id:Id.Lit_Chars val:'\t git --bare update-server-info) &&\n' span_id:183) (Token id:Id.Lit_Chars val:'\tgit push &&\n' span_id:184) (Token id:Id.Lit_Chars val:'\t(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git &&\n' span_id:185) (Token id: Id.Lit_Chars val: '\t test $HEAD = $(git rev-parse --verify HEAD))\n' span_id: 186 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'http-push fetches unpacked objects' span_id:193))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:197) (Token id: Id.Lit_Chars val: '\tcp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \\\n' span_id: 198 ) (Token id:Id.Lit_Chars val:'\t\t"$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_unpacked.git &&\n' span_id:199) (Token id:Id.Lit_Chars val:'\n' span_id:200) (Token id:Id.Lit_Chars val:'\tgit clone $HTTPD_URL/dumb/test_repo_unpacked.git \\\n' span_id:201) (Token id:Id.Lit_Chars val:'\t\t"$ROOT_PATH"/fetch_unpacked &&\n' span_id:202) (Token id:Id.Lit_Chars val:'\n' span_id:203) (Token id: Id.Lit_Chars val: '\t# By reset, we force git to retrieve the object\n' span_id: 204 ) (Token id:Id.Lit_Chars val:'\t(cd "$ROOT_PATH"/fetch_unpacked &&\n' span_id:205) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD^ &&\n' span_id:206) (Token id:Id.Lit_Chars val:'\t git remote rm origin &&\n' span_id:207) (Token id: Id.Lit_Chars val: '\t git reflog expire --expire=0 --all &&\n' span_id: 208 ) (Token id:Id.Lit_Chars val:'\t git prune &&\n' span_id:209) (Token id: Id.Lit_Chars val: '\t git push -f -v $HTTPD_URL/dumb/test_repo_unpacked.git master)\n' span_id: 210 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'http-push fetches packed objects' span_id:217))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:221) (Token id: Id.Lit_Chars val: '\tcp -R "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \\\n' span_id: 222 ) (Token id:Id.Lit_Chars val:'\t\t"$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git &&\n' span_id:223) (Token id:Id.Lit_Chars val:'\n' span_id:224) (Token id:Id.Lit_Chars val:'\tgit clone $HTTPD_URL/dumb/test_repo_packed.git \\\n' span_id:225) (Token id: Id.Lit_Chars val: '\t\t"$ROOT_PATH"/test_repo_clone_packed &&\n' span_id: 226 ) (Token id:Id.Lit_Chars val:'\n' span_id:227) (Token id: Id.Lit_Chars val: '\t(cd "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo_packed.git &&\n' span_id: 228 ) (Token id:Id.Lit_Chars val:'\t git --bare repack &&\n' span_id:229) (Token id:Id.Lit_Chars val:'\t git --bare prune-packed) &&\n' span_id:230) (Token id:Id.Lit_Chars val:'\n' span_id:231) (Token id: Id.Lit_Chars val: '\t# By reset, we force git to retrieve the packed object\n' span_id: 232 ) (Token id:Id.Lit_Chars val:'\t(cd "$ROOT_PATH"/test_repo_clone_packed &&\n' span_id:233) (Token id:Id.Lit_Chars val:'\t git reset --hard HEAD^ &&\n' span_id:234) (Token id:Id.Lit_Chars val:'\t git remote remove origin &&\n' span_id:235) (Token id: Id.Lit_Chars val: '\t git reflog expire --expire=0 --all &&\n' span_id: 236 ) (Token id:Id.Lit_Chars val:'\t git prune &&\n' span_id:237) (Token id: Id.Lit_Chars val: '\t git push -f -v $HTTPD_URL/dumb/test_repo_packed.git master)\n' span_id: 238 ) ) } ) (C {(test_expect_success)} {(SQ (Token id:Id.Lit_Chars val:'create and delete remote branch' span_id:245))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:249) (Token id:Id.Lit_Chars val:'\tcd "$ROOT_PATH"/test_repo_clone &&\n' span_id:250) (Token id:Id.Lit_Chars val:'\tgit checkout -b dev &&\n' span_id:251) (Token id:Id.Lit_Chars val:'\t: >path3 &&\n' span_id:252) (Token id:Id.Lit_Chars val:'\tgit add path3 &&\n' span_id:253) (Token id:Id.Lit_Chars val:'\ttest_tick &&\n' span_id:254) (Token id:Id.Lit_Chars val:'\tgit commit -m dev &&\n' span_id:255) (Token id:Id.Lit_Chars val:'\tgit push origin dev &&\n' span_id:256) (Token id:Id.Lit_Chars val:'\tgit push origin :dev &&\n' span_id:257) (Token id: Id.Lit_Chars val: '\ttest_must_fail git show-ref --verify refs/remotes/origin/dev\n' span_id: 258 ) ) } ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'MKCOL sends directory names with trailing slashes' span_id: 265 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:269) (Token id:Id.Lit_Chars val:'\n' span_id:270) (Token id: Id.Lit_Chars val: '\t! grep "\\"MKCOL.*[^/] HTTP/[^ ]*\\"" < "$HTTPD_ROOT_PATH"/access.log\n' span_id: 271 ) (Token id:Id.Lit_Chars val:'\n' span_id:272) ) } ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x1) op: assign_op.Equal rhs: {(DQ ('[0-9a-f]'))} spids: [276] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x2) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1'))} spids: [281] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x5) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ) } spids: [287] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x38) op: assign_op.Equal rhs: { (DQ ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x5') ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ($ Id.VSub_DollarName '$x1') ) } spids: [296] ) ] ) (command.ShAssignment pairs: [ (assign_pair lhs: (sh_lhs_expr.Name name:x40) op: assign_op.Equal rhs: {(DQ ($ Id.VSub_DollarName '$x38') ($ Id.VSub_DollarName '$x2'))} spids: [310] ) ] ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'PUT and MOVE sends object to URLs with SHA-1 hash suffix' span_id: 320 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:324) (Token id:Id.Lit_Chars val:'\tsed \\\n' span_id:325) (Token id:Id.Lit_Chars val:'\t\t-e "s/PUT /OP /" \\\n' span_id:326) (Token id:Id.Lit_Chars val:'\t\t-e "s/MOVE /OP /" \\\n' span_id:327) (Token id: Id.Lit_Chars val: '\t -e "s|/objects/$x2/${x38}_$x40|WANTED_PATH_REQUEST|" \\\n' span_id: 328 ) (Token id:Id.Lit_Chars val:'\t\t"$HTTPD_ROOT_PATH"/access.log |\n' span_id:329) (Token id: Id.Lit_Chars val: '\tgrep -e "\\"OP .*WANTED_PATH_REQUEST HTTP/[.0-9]*\\" 20[0-9] "\n' span_id: 330 ) (Token id:Id.Lit_Chars val:'\n' span_id:331) ) } ) (C {(test_http_push_nonff)} {(DQ ($ Id.VSub_DollarName '$HTTPD_DOCUMENT_ROOT_PATH')) (/test_repo.git)} {(DQ ($ Id.VSub_DollarName '$ROOT_PATH')) (/test_repo_clone)} {(master)} ) (C {(test_expect_success)} { (SQ (Token id: Id.Lit_Chars val: 'push to password-protected repository (user in URL)' span_id: 355 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:359) (Token id:Id.Lit_Chars val:'\ttest_commit pw-user &&\n' span_id:360) (Token id:Id.Lit_Chars val:'\tset_askpass user@host pass@host &&\n' span_id:361) (Token id: Id.Lit_Chars val: '\tgit push "$HTTPD_URL_USER/auth/dumb/test_repo.git" HEAD &&\n' span_id: 362 ) (Token id:Id.Lit_Chars val:'\tgit rev-parse --verify HEAD >expect &&\n' span_id:363) (Token id: Id.Lit_Chars val: '\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git" \\\n' span_id: 364 ) (Token id:Id.Lit_Chars val:'\t\trev-parse --verify HEAD >actual &&\n' span_id:365) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:366) ) } ) (C {(test_expect_failure)} {(SQ (Token id:Id.Lit_Chars val:'user was prompted only once for password' span_id:373))} { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:377) (Token id:Id.Lit_Chars val:'\texpect_askpass pass user@host\n' span_id:378) ) } ) (C {(test_expect_failure)} { (SQ (Token id: Id.Lit_Chars val: 'push to password-protected repository (no user in URL)' span_id: 385 ) ) } { (SQ (Token id:Id.Lit_Chars val:'\n' span_id:389) (Token id:Id.Lit_Chars val:'\ttest_commit pw-nouser &&\n' span_id:390) (Token id:Id.Lit_Chars val:'\tset_askpass user@host pass@host &&\n' span_id:391) (Token id: Id.Lit_Chars val: '\tgit push "$HTTPD_URL/auth/dumb/test_repo.git" HEAD &&\n' span_id: 392 ) (Token id:Id.Lit_Chars val:'\texpect_askpass both user@host &&\n' span_id:393) (Token id: Id.Lit_Chars val: '\tgit rev-parse --verify HEAD >expect &&\n' span_id: 394 ) (Token id: Id.Lit_Chars val: '\tgit --git-dir="$HTTPD_DOCUMENT_ROOT_PATH/auth/dumb/test_repo.git" \\\n' span_id: 395 ) (Token id:Id.Lit_Chars val:'\t\trev-parse --verify HEAD >actual &&\n' span_id:396) (Token id:Id.Lit_Chars val:'\ttest_cmp expect actual\n' span_id:397) ) } ) (C {(stop_httpd)}) (C {(test_done)}) ] )