branch: skip commit checks when deleting symref branches
authorRené Scharfe <rene.scharfe@lsrfire.ath.cx>
Thu, 18 Oct 2012 12:07:11 +0000 (14:07 +0200)
committerJunio C Hamano <gitster@pobox.com>
Thu, 18 Oct 2012 21:36:17 +0000 (14:36 -0700)
commit0fe700e311f2d7e55eb23fe941fab9155d7f91df
tree0ab1992cb3fc0eeb2f0ccbf09c073fb2da0e9c02
parent566c7707db4eb18a116659b08d6ff7ad79fcfefd
branch: skip commit checks when deleting symref branches

Before a branch is deleted, we check that it points to a valid
commit.  With -d we also check that the commit is a merged; this
check is not done with -D.

The reason for that is that commits pointed to by branches should
never go missing; if they do then something broke and it's better
to stop instead of adding to the mess.  And a non-merged commit
may contain changes that are worth preserving, so we require the
stronger option -D instead of -d to get rid of them.

If a branch consists of a symref, these concerns don't apply.
Deleting such a branch can't make a commit become unreferenced,
so we don't need to check if it is merged, or even if it is
actually a valid commit.  Skip them in that case.  This allows
us to delete dangling symref branches.

Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
builtin/branch.c
t/t3200-branch.sh