(oops, now my email was rejected) On Wed, Oct 31, 2012 at 12:55 AM, Felipe Contreras <felipe.contreras@xxxxxxxxx> wrote: > Hi, > > (again because the mailing list rejected it) (Gmal switched interface > and HTML is the default) > > On Wed, Oct 31, 2012 at 6:37 AM, Chris Rorvick <chris@xxxxxxxxxxx> wrote: >> >> References are allowed to update from one commit-ish to another if the >> former is a ancestor of the latter. This behavior is oriented to >> branches which are expected to move with commits. Tag references are >> expected to be static in a repository, though, thus an update to a >> tag (lightweight and annotated) should be rejected unless the update is >> forced. >> >> To enable this functionality, the following checks have been added to >> set_ref_status_for_push() for updating refs (i.e, not new or deletion) >> to restrict fast-forwarding in pushes: >> >> 1) The old and new references must be commits. If this fails, >> it is not a valid update for a branch. >> >> 2) The reference name cannot start with "refs/tags/". This >> catches lightweight tags which (usually) point to commits >> and therefore would not be caught by (1). >> >> If either of these checks fails, then it is flagged (by default) with a >> status indicating the update is being rejected due to the reference >> already existing in the remote. This can be overridden by passing >> --force to git push. >> >> The new status has the added benefit of being able to provide accurate >> feedback as to why the ref update failed and what can be done. >> Currently all ref update rejections are assumed to be for branches. > > Makes sense to me. I've believe I've been hit by this a couple of > times when tags were updated, and a colleague did 'git push' and they > went all back, or something like that. To handle that case properly > probably more changes are needed, but this is a change in the right > direction. > >> +test_expect_success 'push tag requires --force to update remote tag' ' >> + mk_test heads/master && >> + mk_child child1 && >> + mk_child child2 && >> + ( >> + cd child1 && >> + git tag lw_tag && >> + git tag -a -m "message 1" ann_tag && >> + git push ../child2 lw_tag && >> + git push ../child2 ann_tag && >> + >file1 && >> + git add file1 && >> + git commit -m "file1" && >> + git tag -f lw_tag && >> + git tag -f -a -m "message 2" ann_tag && >> + ! git push ../child2 lw_tag && > > You probably should use test_must_fail. Thanks, will fix. > I don't see anything wrong with the patch, but I wonder if it might be > possible to split it to ease the review. I initially thought I'd split it into two: 1) to improve the feedback and 2) to change the behavior. But (1) was shaping up to be similar in size to the sum so I scrapped that idea. I will see what I can do. Thanks, Chris -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html