diff mbox series

[v4,4/8] t5548: add new porcelain test cases

Message ID 20250131-pks-push-atomic-respect-exit-code-v4-4-a8b41f01a676@pks.im (mailing list archive)
State Superseded
Headers show
Series transport: don't ignore git-receive-pack(1) exit code on atomic push | expand

Commit Message

Patrick Steinhardt Jan. 31, 2025, 10:53 a.m. UTC
Add two more test cases exercising git-push(1) with `--procelain`, one
exercising a non-atomic and one exercising an atomic push.

Based-on-patch-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
---
 t/t5548-push-porcelain.sh | 68 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 68 insertions(+)

Comments

Eric Sunshine Jan. 31, 2025, 2:46 p.m. UTC | #1
On Fri, Jan 31, 2025 at 5:53 AM Patrick Steinhardt <ps@pks.im> wrote:
> Add two more test cases exercising git-push(1) with `--procelain`, one
> exercising a non-atomic and one exercising an atomic push.
>
> Based-on-patch-by: Jiang Xin <zhiyou.jx@alibaba-inc.com>
> Signed-off-by: Patrick Steinhardt <ps@pks.im>
> ---
> diff --git a/t/t5548-push-porcelain.sh b/t/t5548-push-porcelain.sh
> @@ -132,6 +132,40 @@ run_git_push_porcelain_output_test() {
> +       # Refs of upstream : main(B)  foo(A)  bar(A)  baz(A)
> +       # Refs of workbench: main(A)                  baz(A)  next(A)
> +       # git-push         : main(A)  NULL    (B)     baz(A)  next(A)
> +       test_expect_success ".. git-push --porcelain ($PROTOCOL)" '
> +               test_when_finished "setup_upstream \"$upstream\"" &&
> +               test_must_fail git -C workbench push --porcelain origin \
> +                       main \
> +                       :refs/heads/foo \
> +                       $B:bar \
> +                       baz \
> +                       next >out &&
> +               make_user_friendly_and_stable_output <out >actual &&
> +               format_and_save_expect <<-EOF &&
> +               > To <URL/of/upstream.git>
> +               > =     refs/heads/baz:refs/heads/baz   [up to date]
> +               >       <COMMIT-B>:refs/heads/bar       <COMMIT-A>..<COMMIT-B>
> +               > -     :refs/heads/foo [deleted]
> +               > *     refs/heads/next:refs/heads/next [new branch]
> +               > !     refs/heads/main:refs/heads/main [rejected] (non-fast-forward)
> +               > Done
> +               EOF

Using '\EOF' rather than bare 'EOF' would be appropriate here and in
the other new heredocs added by this patch.

(Not worth a reroll on its own.)
diff mbox series

Patch

diff --git a/t/t5548-push-porcelain.sh b/t/t5548-push-porcelain.sh
index ededd8edb9..b510a2e6bb 100755
--- a/t/t5548-push-porcelain.sh
+++ b/t/t5548-push-porcelain.sh
@@ -132,6 +132,40 @@  run_git_push_porcelain_output_test() {
 		;;
 	esac
 
+	# Refs of upstream : main(B)  foo(A)  bar(A)  baz(A)
+	# Refs of workbench: main(A)                  baz(A)  next(A)
+	# git-push         : main(A)  NULL    (B)     baz(A)  next(A)
+	test_expect_success ".. git-push --porcelain ($PROTOCOL)" '
+		test_when_finished "setup_upstream \"$upstream\"" &&
+		test_must_fail git -C workbench push --porcelain origin \
+			main \
+			:refs/heads/foo \
+			$B:bar \
+			baz \
+			next >out &&
+		make_user_friendly_and_stable_output <out >actual &&
+		format_and_save_expect <<-EOF &&
+		> To <URL/of/upstream.git>
+		> =	refs/heads/baz:refs/heads/baz	[up to date]
+		>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
+		> -	:refs/heads/foo	[deleted]
+		> *	refs/heads/next:refs/heads/next	[new branch]
+		> !	refs/heads/main:refs/heads/main	[rejected] (non-fast-forward)
+		> Done
+		EOF
+		test_cmp expect actual &&
+
+		git -C "$upstream" show-ref >out &&
+		make_user_friendly_and_stable_output <out >actual &&
+		cat >expect <<-EOF &&
+		<COMMIT-B> refs/heads/bar
+		<COMMIT-A> refs/heads/baz
+		<COMMIT-B> refs/heads/main
+		<COMMIT-A> refs/heads/next
+		EOF
+		test_cmp expect actual
+	'
+
 	# Refs of upstream : main(B)  foo(A)  bar(A)  baz(A)
 	# Refs of workbench: main(A)                  baz(A)  next(A)
 	# git-push         : main(A)  NULL    (B)     baz(A)  next(A)
@@ -242,6 +276,7 @@  run_git_push_porcelain_output_test() {
 	# Refs of workbench: main(A)                  baz(A)  next(A)
 	# git-push         : main(A)                          next(A)
 	test_expect_success ".. non-fastforward push ($PROTOCOL)" '
+		test_when_finished "setup_upstream \"$upstream\"" &&
 		(
 			cd workbench &&
 			test_must_fail git push --porcelain origin \
@@ -268,6 +303,39 @@  run_git_push_porcelain_output_test() {
 		EOF
 		test_cmp expect actual
 	'
+
+	# Refs of upstream : main(B)  foo(A)  bar(A)  baz(A)
+	# Refs of workbench: main(A)                  baz(A)  next(A)
+	# git-push         : main(A)  NULL    (B)     baz(A)  next(A)
+	test_expect_success ".. git push --porcelain --atomic --force ($PROTOCOL)" '
+		git -C workbench push --porcelain --atomic --force origin \
+			main \
+			:refs/heads/foo \
+			$B:bar \
+			baz \
+			next >out &&
+		make_user_friendly_and_stable_output <out >actual &&
+		format_and_save_expect <<-EOF &&
+		> To <URL/of/upstream.git>
+		> =	refs/heads/baz:refs/heads/baz	[up to date]
+		>  	<COMMIT-B>:refs/heads/bar	<COMMIT-A>..<COMMIT-B>
+		> -	:refs/heads/foo	[deleted]
+		> +	refs/heads/main:refs/heads/main	<COMMIT-B>...<COMMIT-A> (forced update)
+		> *	refs/heads/next:refs/heads/next	[new branch]
+		> Done
+		EOF
+		test_cmp expect actual &&
+
+		git -C "$upstream" show-ref >out &&
+		make_user_friendly_and_stable_output <out >actual &&
+		cat >expect <<-EOF &&
+		<COMMIT-B> refs/heads/bar
+		<COMMIT-A> refs/heads/baz
+		<COMMIT-A> refs/heads/main
+		<COMMIT-A> refs/heads/next
+		EOF
+		test_cmp expect actual
+	'
 }
 
 setup_upstream_and_workbench upstream.git