Download raw body.
gotd: initial implementation of the delete-refs capability
On Sat, Jan 28, 2023 at 10:11:04AM +0100, Omar Polo wrote: > 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. > Great, thanks! Ok. The more test coverage, the better. > 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