]> git.ipfire.org Git - thirdparty/git.git/commitdiff
t5543: atomic push reports exit code failure
authorPatrick Steinhardt <ps@pks.im>
Mon, 3 Feb 2025 06:29:37 +0000 (07:29 +0100)
committerJunio C Hamano <gitster@pobox.com>
Mon, 3 Feb 2025 23:24:58 +0000 (15:24 -0800)
Add new test cases in t5543 to avoid ignoring the exit code of
git-receive-pack(1) during atomic push with "--porcelain" flag.

We'd typically notice this case because the refs would have their error
message set. But there is an edge case when pushing refs succeeds, but
git-receive-pack(1) exits with a non-zero exit code at a later point in
time due to another error. An atomic git-push(1) would ignore that error
code, and consequently it would return successfully and not print any
error message at all.

Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
t/t5543-atomic-push.sh

index 04b47ad84a86ab3407ba26f069d934ed7dcb5dec..32181b9afb71174cc8b5d7d8d48e50644df395df 100755 (executable)
@@ -280,4 +280,34 @@ test_expect_success 'atomic push reports (reject by non-ff)' '
        test_cmp expect actual
 '
 
+test_expect_failure 'atomic push reports exit code failure' '
+       write_script receive-pack-wrapper <<-\EOF &&
+       git-receive-pack "$@"
+       exit 1
+       EOF
+       test_must_fail git -C workbench push --atomic \
+               --receive-pack="${SQ}$(pwd)${SQ}/receive-pack-wrapper" \
+               up HEAD:refs/heads/no-conflict 2>err &&
+       cat >expect <<-EOF &&
+       To ../upstream
+        * [new branch]      HEAD -> no-conflict
+       error: failed to push some refs to ${SQ}../upstream${SQ}
+       EOF
+       test_cmp expect err
+'
+
+test_expect_failure 'atomic push reports exit code failure with porcelain' '
+       write_script receive-pack-wrapper <<-\EOF &&
+       git-receive-pack "$@"
+       exit 1
+       EOF
+       test_must_fail git -C workbench push --atomic --porcelain \
+               --receive-pack="${SQ}$(pwd)${SQ}/receive-pack-wrapper" \
+               up HEAD:refs/heads/no-conflict-porcelain 2>err &&
+       cat >expect <<-EOF &&
+       error: failed to push some refs to ${SQ}../upstream${SQ}
+       EOF
+       test_cmp expect err
+'
+
 test_done