diff options
Diffstat (limited to 't/t5541-http-push-smart.sh')
-rwxr-xr-x | t/t5541-http-push-smart.sh | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/t/t5541-http-push-smart.sh b/t/t5541-http-push-smart.sh index 4c970787b0..c024fa2818 100755 --- a/t/t5541-http-push-smart.sh +++ b/t/t5541-http-push-smart.sh @@ -4,6 +4,9 @@ # test_description='test smart pushing over http via http-backend' +GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME=main +export GIT_TEST_DEFAULT_INITIAL_BRANCH_NAME + . ./test-lib.sh ROOT_PATH="$PWD" @@ -49,7 +52,7 @@ test_expect_success 'no empty path components' ' # NEEDSWORK: If the overspecification of the expected result is reduced, we # might be able to run this test in all protocol versions. - if test -z "$GIT_TEST_PROTOCOL_VERSION" + if test "$GIT_TEST_PROTOCOL_VERSION" = 0 then check_access_log exp fi @@ -115,7 +118,7 @@ test_expect_success 'rejected update prints status' ' git commit -m dev2 && test_must_fail git push origin dev2 2>act && sed -e "/^remote: /s/ *$//" <act >cmp && - test_i18ncmp exp cmp + test_cmp exp cmp ' rm -f "$HTTPD_DOCUMENT_ROOT_PATH/test_repo.git/hooks/update" @@ -135,30 +138,30 @@ EOF test_expect_success 'used receive-pack service' ' # NEEDSWORK: If the overspecification of the expected result is reduced, we # might be able to run this test in all protocol versions. - if test -z "$GIT_TEST_PROTOCOL_VERSION" + if test "$GIT_TEST_PROTOCOL_VERSION" = 0 then check_access_log exp fi ' test_http_push_nonff "$HTTPD_DOCUMENT_ROOT_PATH"/test_repo.git \ - "$ROOT_PATH"/test_repo_clone master success + "$ROOT_PATH"/test_repo_clone main success test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper' ' # create a dissimilarly-named remote ref so that git is unable to match the # two refs (viz. local, remote) unless an explicit refspec is provided. - git push origin master:retsam && + git push origin main:niam && echo "change changed" > path2 && git commit -a -m path2 --amend && - # push master too; this ensures there is at least one '"'push'"' command to + # push main too; this ensures there is at least one '"'push'"' command to # the remote helper and triggers interaction with the helper. - test_must_fail git push -v origin +master master:retsam >output 2>&1' + test_must_fail git push -v origin +main main:niam >output 2>&1' test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper: remote output' ' - grep "^ + [a-f0-9]*\.\.\.[a-f0-9]* *master -> master (forced update)$" output && - grep "^ ! \[rejected\] *master -> retsam (non-fast-forward)$" output + grep "^ + [a-f0-9]*\.\.\.[a-f0-9]* *main -> main (forced update)$" output && + grep "^ ! \[rejected\] *main -> niam (non-fast-forward)$" output ' test_expect_success 'push fails for non-fast-forward refs unmatched by remote helper: our output' ' @@ -167,7 +170,7 @@ test_expect_success 'push fails for non-fast-forward refs unmatched by remote he ' test_expect_success 'push (chunked)' ' - git checkout master && + git checkout main && test_commit commit path3 && HEAD=$(git rev-parse --verify HEAD) && test_config http.postbuffer 4 && @@ -177,6 +180,9 @@ test_expect_success 'push (chunked)' ' test $HEAD = $(git rev-parse --verify HEAD)) ' +## References of remote: atomic1(1) main(2) collateral(2) other(2) +## References of local : atomic2(2) main(1) collateral(3) other(2) collateral1(3) atomic(1) +## Atomic push : main(1) collateral(3) atomic(1) test_expect_success 'push --atomic also prevents branch creation, reports collateral' ' # Setup upstream repo - empty for now d=$HTTPD_DOCUMENT_ROOT_PATH/atomic-branches.git && @@ -189,14 +195,15 @@ test_expect_success 'push --atomic also prevents branch creation, reports collat test_commit atomic2 && git branch collateral && git branch other && - git push "$up" master collateral other && + git push "$up" atomic1 main collateral other && + git tag -d atomic1 && # collateral is a valid push, but should be failed by atomic push git checkout collateral && test_commit collateral1 && - # Make master incompatible with upstream to provoke atomic - git checkout master && + # Make main incompatible with upstream to provoke atomic + git checkout main && git reset --hard HEAD^ && # Add a new branch which should be failed by atomic push. This is a @@ -204,7 +211,7 @@ test_expect_success 'push --atomic also prevents branch creation, reports collat git branch atomic && # --atomic should cause entire push to be rejected - test_must_fail git push --atomic "$up" master atomic collateral 2>output && + test_must_fail git push --atomic "$up" main atomic collateral 2>output && # the new branch should not have been created upstream test_must_fail git -C "$d" show-ref --verify refs/heads/atomic && @@ -212,19 +219,23 @@ test_expect_success 'push --atomic also prevents branch creation, reports collat # upstream should still reflect atomic2, the last thing we pushed # successfully git rev-parse atomic2 >expected && - # on master... - git -C "$d" rev-parse refs/heads/master >actual && + # on main... + git -C "$d" rev-parse refs/heads/main >actual && test_cmp expected actual && # ...and collateral. git -C "$d" rev-parse refs/heads/collateral >actual && test_cmp expected actual && # the failed refs should be indicated to the user - grep "^ ! .*rejected.* master -> master" output && + grep "^ ! .*rejected.* main -> main" output && # the collateral failure refs should be indicated to the user grep "^ ! .*rejected.* atomic -> atomic .*atomic push failed" output && - grep "^ ! .*rejected.* collateral -> collateral .*atomic push failed" output + grep "^ ! .*rejected.* collateral -> collateral .*atomic push failed" output && + + # never report what we do not push + ! grep "^ ! .*rejected.* atomic1 " output && + ! grep "^ ! .*rejected.* other " output ' test_expect_success 'push --atomic fails on server-side errors' ' @@ -456,11 +467,41 @@ test_expect_success 'push status output scrubs password' ' grep "^To $HTTPD_URL/smart/test_repo.git" status ' +test_expect_success 'clone/fetch scrubs password from reflogs' ' + cd "$ROOT_PATH" && + git clone "$HTTPD_URL_USER_PASS/smart/test_repo.git" \ + reflog-test && + cd reflog-test && + test_commit prepare-for-force-fetch && + git switch -c away && + git fetch "$HTTPD_URL_USER_PASS/smart/test_repo.git" \ + +main:main && + # should have been scrubbed down to vanilla URL + git log -g main >reflog && + grep "$HTTPD_URL" reflog && + ! grep "$HTTPD_URL_USER_PASS" reflog +' + +test_expect_success 'Non-ASCII branch name can be used with --force-with-lease' ' + cd "$ROOT_PATH" && + git clone "$HTTPD_URL_USER_PASS/smart/test_repo.git" non-ascii && + cd non-ascii && + git checkout -b rama-de-árbol && + test_commit F && + git push --force-with-lease origin rama-de-árbol && + git ls-remote origin refs/heads/rama-de-árbol >actual && + git ls-remote . refs/heads/rama-de-árbol >expect && + test_cmp expect actual && + git push --delete --force-with-lease origin rama-de-árbol && + git ls-remote origin refs/heads/rama-de-árbol >actual && + test_must_be_empty actual +' + test_expect_success 'colorize errors/hints' ' cd "$ROOT_PATH"/test_repo_clone && test_must_fail git -c color.transport=always -c color.advice=always \ -c color.push=always \ - push origin origin/master^:master 2>act && + push origin origin/main^:main 2>act && test_decode_color <act >decoded && test_i18ngrep "<RED>.*rejected.*<RESET>" decoded && test_i18ngrep "<RED>error: failed to push some refs" decoded && |