diff options
author | René Scharfe <rene.scharfe@lsrfire.ath.cx> | 2012-10-18 14:07:11 +0200 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2012-10-18 14:36:17 -0700 |
commit | 0fe700e311f2d7e55eb23fe941fab9155d7f91df (patch) | |
tree | 0ab1992cb3fc0eeb2f0ccbf09c073fb2da0e9c02 /t/t3200-branch.sh | |
parent | 566c7707db4eb18a116659b08d6ff7ad79fcfefd (diff) | |
download | git-0fe700e311f2d7e55eb23fe941fab9155d7f91df.tar.gz |
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>
Diffstat (limited to 't/t3200-branch.sh')
-rwxr-xr-x | t/t3200-branch.sh | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh index ec5f70eeba..1323f6ff71 100755 --- a/t/t3200-branch.sh +++ b/t/t3200-branch.sh @@ -273,6 +273,15 @@ test_expect_success 'deleting a symref' ' test_i18ncmp expect actual ' +test_expect_success 'deleting a dangling symref' ' + git symbolic-ref refs/heads/dangling-symref nowhere && + test_path_is_file .git/refs/heads/dangling-symref && + echo "Deleted branch dangling-symref (was 0000000)." >expect && + git branch -d dangling-symref >actual && + test_path_is_missing .git/refs/heads/dangling-symref && + test_i18ncmp expect actual +' + test_expect_success 'renaming a symref is not allowed' \ ' git symbolic-ref refs/heads/master2 refs/heads/master && |