> diff --git a/t/t5516-fetch-push.sh b/t/t5516-fetch-push.sh > index c9a2011915..71fc902062 100755 > --- a/t/t5516-fetch-push.sh > +++ b/t/t5516-fetch-push.sh > @@ -965,35 +965,43 @@ test_expect_success 'push into aliased refs (inconsistent)' ' > ) > ' > > -test_expect_success 'push requires --force to update lightweight tag' ' > - mk_test testrepo heads/master && > - mk_child testrepo child1 && > - mk_child testrepo child2 && > - ( > - cd child1 && > - git tag Tag && > - git push ../child2 Tag && > - >file1 && > - git add file1 && > - git commit -m "file1" && > - git tag -f Tag && > - test_must_fail git push ../child2 Tag && > - git push --force ../child2 Tag && > - git tag -f Tag HEAD~ && > - test_must_fail git push ../child2 Tag && > - git push --force ../child2 Tag && > - git tag -f Tag && > - test_must_fail git push ../child2 "refs/tags/*:refs/tags/*" && > - git push --force ../child2 "refs/tags/*:refs/tags/*" && > - git tag -f Tag HEAD~ && > - git push ../child2 "+refs/tags/*:refs/tags/*" && > - git tag -f Tag && > - git push --no-force ../child2 "+refs/tags/*:refs/tags/*" && > - git tag -f Tag HEAD~ && > - test_must_fail git push ../child2 tag Tag && > - git push --force ../child2 tag Tag > - ) > -' > +test_force_push_tag () { > + tag_type_description=$1 > + tag_args=$2 > + > + test_expect_success "push requires --force to update $tag_type_description" " > + mk_test testrepo heads/master && > + mk_child testrepo child1 && > + mk_child testrepo child2 && > + ( > + cd child1 && > + git tag Tag && > + git push ../child2 Tag && > + >file1 && > + git add file1 && > + git commit -m 'file1' && > + git tag $tag_args Tag && > + test_must_fail git push ../child2 Tag && > + git push --force ../child2 Tag && > + git tag $tag_args Tag HEAD~ && > + test_must_fail git push ../child2 Tag && > + git push --force ../child2 Tag && > + git tag $tag_args Tag && > + test_must_fail git push ../child2 'refs/tags/*:refs/tags/*' && > + git push --force ../child2 'refs/tags/*:refs/tags/*' && > + git tag $tag_args Tag HEAD~ && > + git push ../child2 '+refs/tags/*:refs/tags/*' && > + git tag $tag_args Tag &&function There is that unwanted "function" at the end of the line. Interstingly, the test does pass when run with dash, but fails the chain-lint tests when run with Bash, even though it's in a subshell. > + git push --no-force ../child2 '+refs/tags/*:refs/tags/*' && > + git tag $tag_args Tag HEAD~ && > + test_must_fail git push ../child2 tag Tag && > + git push --force ../child2 tag Tag > + ) > + " > +} > + > +test_force_push_tag "lightweight tag" "-f" > +test_force_push_tag "annotated tag" "-f -a -m'msg'" > > test_expect_success 'push --porcelain' ' > mk_empty testrepo &&