зеркало из https://github.com/microsoft/git.git
branch: delete symref branch, not its target
If a branch that is to be deleted happens to be a symref to another branch, the current code removes the targeted branch instead of the one it was called for. Change this surprising behaviour and delete the symref branch instead. Signed-off-by: Rene Scharfe <rene.scharfe@lsrfire.ath.cx> Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Родитель
22ed792753
Коммит
566c7707db
|
@ -239,7 +239,7 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||
continue;
|
||||
}
|
||||
|
||||
if (delete_ref(name, sha1, 0)) {
|
||||
if (delete_ref(name, sha1, REF_NODEREF)) {
|
||||
error(remote_branch
|
||||
? _("Error deleting remote branch '%s'")
|
||||
: _("Error deleting branch '%s'"),
|
||||
|
|
|
@ -262,6 +262,17 @@ test_expect_success 'config information was renamed, too' \
|
|||
"test $(git config branch.s.dummy) = Hello &&
|
||||
test_must_fail git config branch.s/s/dummy"
|
||||
|
||||
test_expect_success 'deleting a symref' '
|
||||
git branch target &&
|
||||
git symbolic-ref refs/heads/symref refs/heads/target &&
|
||||
sha1=$(git rev-parse symref | cut -c 1-7) &&
|
||||
echo "Deleted branch symref (was $sha1)." >expect &&
|
||||
git branch -d symref >actual &&
|
||||
test_path_is_file .git/refs/heads/target &&
|
||||
test_path_is_missing .git/refs/heads/symref &&
|
||||
test_i18ncmp expect actual
|
||||
'
|
||||
|
||||
test_expect_success 'renaming a symref is not allowed' \
|
||||
'
|
||||
git symbolic-ref refs/heads/master2 refs/heads/master &&
|
||||
|
|
Загрузка…
Ссылка в новой задаче