Download raw body.
gotd: initial implementation of the delete-refs capability
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
}
gotd: initial implementation of the delete-refs capability