Merge branch 'cr/push-force-tag-update'

Require "-f" for push to update a tag, even if it is a fast-forward.

* cr/push-force-tag-update:
  push: allow already-exists advice to be disabled
  push: rename config variable for more general use
  push: cleanup push rules comment
  push: clarify rejection of update to non-commit-ish
  push: require force for annotated tags
  push: require force for refs under refs/tags/
  push: flag updates that require force
  push: keep track of "update" state separately
  push: add advice for rejected tag reference
  push: return reject reasons as a bitset
This commit is contained in:
Junio C Hamano
2013-01-05 23:41:34 -08:00
13 changed files with 188 additions and 60 deletions

View File

@ -368,7 +368,7 @@ test_expect_success 'push with colon-less refspec (2)' '
git branch -D frotz
fi &&
git tag -f frotz &&
git push testrepo frotz &&
git push -f testrepo frotz &&
check_push_result $the_commit tags/frotz &&
check_push_result $the_first_commit heads/frotz
@ -929,6 +929,48 @@ test_expect_success 'push into aliased refs (inconsistent)' '
)
'
test_expect_success 'push requires --force to update lightweight tag' '
mk_test heads/master &&
mk_child child1 &&
mk_child child2 &&
(
cd child1 &&
git tag Tag &&
git push ../child2 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 &&
test_must_fail git push ../child2 Tag HEAD~ &&
git push --force ../child2 Tag
)
'
test_expect_success 'push requires --force to update annotated tag' '
mk_test heads/master &&
mk_child child1 &&
mk_child child2 &&
(
cd child1 &&
git tag -a -m "message 1" Tag &&
git push ../child2 Tag:refs/tmp/Tag &&
git push ../child2 Tag:refs/tmp/Tag &&
>file1 &&
git add file1 &&
git commit -m "file1" &&
git tag -f -a -m "message 2" Tag &&
test_must_fail git push ../child2 Tag:refs/tmp/Tag &&
git push --force ../child2 Tag:refs/tmp/Tag &&
git tag -f -a -m "message 3" Tag HEAD~ &&
test_must_fail git push ../child2 Tag:refs/tmp/Tag &&
git push --force ../child2 Tag:refs/tmp/Tag
)
'
test_expect_success 'push --porcelain' '
mk_empty &&
echo >.git/foo "To testrepo" &&