]> git.ipfire.org Git - thirdparty/git.git/blobdiff - t/t5541-http-push-smart.sh
l10n: it.po: update the Italian translation for Git 2.24.0 round #2
[thirdparty/git.git] / t / t5541-http-push-smart.sh
index b86ddb60f2ea6ec1c177b8be5d056d064a1d7697..4c970787b0ec1fcc3d18cdcab0f5c8fd15f16afd 100755 (executable)
@@ -184,11 +184,12 @@ test_expect_success 'push --atomic also prevents branch creation, reports collat
        test_config -C "$d" http.receivepack true &&
        up="$HTTPD_URL"/smart/atomic-branches.git &&
 
-       # Tell "$up" about two branches for now
+       # Tell "$up" about three branches for now
        test_commit atomic1 &&
        test_commit atomic2 &&
        git branch collateral &&
-       git push "$up" master collateral &&
+       git branch other &&
+       git push "$up" master collateral other &&
 
        # collateral is a valid push, but should be failed by atomic push
        git checkout collateral &&
@@ -226,6 +227,41 @@ test_expect_success 'push --atomic also prevents branch creation, reports collat
        grep "^ ! .*rejected.* collateral -> collateral .*atomic push failed" output
 '
 
+test_expect_success 'push --atomic fails on server-side errors' '
+       # Use previously set up repository
+       d=$HTTPD_DOCUMENT_ROOT_PATH/atomic-branches.git &&
+       test_config -C "$d" http.receivepack true &&
+       up="$HTTPD_URL"/smart/atomic-branches.git &&
+
+       # break ref updates for other on the remote site
+       mkdir "$d/refs/heads/other.lock" &&
+
+       # add the new commit to other
+       git branch -f other collateral &&
+
+       # --atomic should cause entire push to be rejected
+       test_must_fail git push --atomic "$up" atomic other 2>output  &&
+
+       # the new branch should not have been created upstream
+       test_must_fail git -C "$d" show-ref --verify refs/heads/atomic &&
+
+       # upstream should still reflect atomic2, the last thing we pushed
+       # successfully
+       git rev-parse atomic2 >expected &&
+       # ...to other.
+       git -C "$d" rev-parse refs/heads/other >actual &&
+       test_cmp expected actual &&
+
+       # the new branch should not have been created upstream
+       test_must_fail git -C "$d" show-ref --verify refs/heads/atomic &&
+
+       # the failed refs should be indicated to the user
+       grep "^ ! .*rejected.* other -> other .*atomic transaction failed" output &&
+
+       # the collateral failure refs should be indicated to the user
+       grep "^ ! .*rejected.* atomic -> atomic .*atomic transaction failed" output
+'
+
 test_expect_success 'push --all can push to empty repo' '
        d=$HTTPD_DOCUMENT_ROOT_PATH/empty-all.git &&
        git init --bare "$d" &&
@@ -262,7 +298,7 @@ test_expect_success TTY 'push shows progress when stderr is a tty' '
        cd "$ROOT_PATH"/test_repo_clone &&
        test_commit noisy &&
        test_terminal git push >output 2>&1 &&
-       test_i18ngrep "Writing objects" output
+       test_i18ngrep "^Writing objects" output
 '
 
 test_expect_success TTY 'push --quiet silences status and progress' '
@@ -277,7 +313,7 @@ test_expect_success TTY 'push --no-progress silences progress but not status' '
        test_commit no-progress &&
        test_terminal git push --no-progress >output 2>&1 &&
        test_i18ngrep "^To http" output &&
-       test_i18ngrep ! "Writing objects" output
+       test_i18ngrep ! "^Writing objects" output
 '
 
 test_expect_success 'push --progress shows progress to non-tty' '
@@ -285,7 +321,7 @@ test_expect_success 'push --progress shows progress to non-tty' '
        test_commit progress &&
        git push --progress >output 2>&1 &&
        test_i18ngrep "^To http" output &&
-       test_i18ngrep "Writing objects" output
+       test_i18ngrep "^Writing objects" output
 '
 
 test_expect_success 'http push gives sane defaults to reflog' '