"GOT", but the "O" is a cute, smiling pufferfish. Index | Thread | Search

From:
Omar Polo <op@omarpolo.com>
Subject:
Re: gotd: initial implementation of the delete-refs capability
To:
Stefan Sperling <stsp@stsp.name>
Cc:
gameoftrees@openbsd.org
Date:
Sat, 28 Jan 2023 10:11:04 +0100

Download raw body.

Thread
On 2023/01/27 20:37:02 +0100, Stefan Sperling <stsp@stsp.name> wrote:
> Could we verify the ref-list reported by the server via got clone -l,
> before and after deletion?

Sure, it's a good idea.  While here I've noticed that in the repo
there are also two other branches so diff belows extend the test to
also try deleting multiple references in one go.

diff /home/op/w/gotd
commit - 9a8e357c727600cb61ac6ec4c83259fa6d9a3081
path + /home/op/w/gotd
blob - b48e2b54f360c89a3ce5d4c9e38d4dd5a7a3532f
file + regress/gotd/repo_write.sh
--- regress/gotd/repo_write.sh
+++ regress/gotd/repo_write.sh
@@ -295,7 +295,7 @@ test_delete_branch() {
 test_delete_branch() {
 	local testroot=`test_init delete_branch 1`
 
-	got clone -q ${GOTD_TEST_REPO_URL} $testroot/repo-clone
+	got clone -a -q ${GOTD_TEST_REPO_URL} $testroot/repo-clone
 	ret=$?
 	if [ $ret -ne 0 ]; then
 		echo "got clone failed unexpectedly" >&2
@@ -328,12 +328,35 @@ test_delete_branch() {
 		return 1
 	fi
 
+	local foo_id=`git_show_branch_head "$testroot/repo-clone" foo`
+	local main_id=`git_show_branch_head "$testroot/repo-clone" main`
+	local nb_id=`git_show_branch_head "$testroot/repo-clone" newbranch`
+	local nb2_id=`git_show_branch_head "$testroot/repo-clone" newbranch2`
+	local tag_id=`got ref -r "$testroot/repo-clone" -l refs/tags/1.0 | \
+		awk '{print $2}'`
+
 	if ! got send -q -r $testroot/repo-clone -b foo; then
 		echo "got send failed unexpectedly" >&2
 		test_done "$testroot" 1
 		return 1
 	fi
 
+	got fetch -q -r $testroot/repo-clone -l >$testroot/refs
+	cat <<EOF >$testroot/refs.expected
+HEAD: refs/heads/main
+HEAD: $main_id
+refs/heads/foo: $foo_id
+refs/heads/main: $main_id
+refs/heads/newbranch: $nb_id
+refs/heads/newbranch2: $nb2_id
+refs/tags/1.0: $tag_id
+EOF
+	if ! cmp -s $testroot/refs.expected $testroot/refs; then
+		diff -u $testroot/refs.expected $testroot/refs
+		test_done "$testroot" 1
+		return 1
+	fi
+
 	got send -r $testroot/repo-clone -d foo >$testroot/stdout
 	ret=$?
 	if [ $ret -ne 0 ]; then
@@ -352,6 +375,55 @@ EOF
 		return 1
 	fi
 
+	got fetch -q -r $testroot/repo-clone -l >$testroot/refs
+	cat <<EOF >$testroot/refs.expected
+HEAD: refs/heads/main
+HEAD: $main_id
+refs/heads/main: $main_id
+refs/heads/newbranch: $nb_id
+refs/heads/newbranch2: $nb2_id
+refs/tags/1.0: $tag_id
+EOF
+	if ! cmp -s $testroot/refs.expected $testroot/refs; then
+		diff -u $testroot/refs.expected $testroot/refs
+		test_done "$testroot" 1
+		return 1
+	fi
+
+	# try to delete multiple branches in one go
+	got send -r $testroot/repo-clone -d newbranch -d newbranch2 \
+		>$testroot/stdout
+	ret=$?
+	if [ $ret -ne 0 ]; then
+		echo "got send with multiple -d failed unexpectedly" >&2
+		test_done "$testroot" 1
+		return 1
+	fi
+
+	cat <<EOF >$testroot/stdout.expected
+Connecting to "origin" ${GOTD_TEST_REPO_URL}
+Server has deleted refs/heads/newbranch2
+Server has deleted refs/heads/newbranch
+EOF
+	if ! cmp -s $testroot/stdout.expected $testroot/stdout; then
+		diff -u $testroot/stdout.expected $testroot/stdout
+		test_done "$testroot" 1
+		return 1
+	fi
+
+	got fetch -q -r $testroot/repo-clone -l >$testroot/refs
+	cat <<EOF >$testroot/refs.expected
+HEAD: refs/heads/main
+HEAD: $main_id
+refs/heads/main: $main_id
+refs/tags/1.0: $tag_id
+EOF
+	if ! cmp -s $testroot/refs.expected $testroot/refs; then
+		diff -u $testroot/refs.expected $testroot/refs
+		test_done "$testroot" 1
+		return 1
+	fi
+
 	# now try again but while also updating another branch
 	# other than deleting `foo'.
 
@@ -359,6 +431,7 @@ EOF
 		echo 'more alpha' > alpha && \
 		got commit -m 'edit alpha on main' && \
 		got send -q -b foo) >/dev/null
+	main_id=`git_show_branch_head "$testroot/repo-clone" main`
 
 	got send -r $testroot/repo-clone -d foo -b main | \
 		grep '^Server has' >$testroot/stdout
@@ -379,6 +452,19 @@ EOF
 		return 1
 	fi
 
+	got fetch -q -r $testroot/repo-clone -l >$testroot/refs
+	cat <<EOF >$testroot/refs.expected
+HEAD: refs/heads/main
+HEAD: $main_id
+refs/heads/main: $main_id
+refs/tags/1.0: $tag_id
+EOF
+	if ! cmp -s $testroot/refs.expected $testroot/refs; then
+		diff -u $testroot/refs.expected $testroot/refs
+		test_done "$testroot" 1
+		return 1
+	fi
+
 	test_done "$testroot" 0
 }