Merge branch 'jk/branch-delete-detached'
Fix a bug where `git branch -d` did not work on an orphaned HEAD. * jk/branch-delete-detached: branch: gracefully handle '-d' on orphan HEAD
This commit is contained in:
commit
26734da056
@ -150,7 +150,7 @@ static int branch_merged(int kind, const char *name,
|
|||||||
if (!reference_rev)
|
if (!reference_rev)
|
||||||
reference_rev = head_rev;
|
reference_rev = head_rev;
|
||||||
|
|
||||||
merged = in_merge_bases(rev, reference_rev);
|
merged = reference_rev ? in_merge_bases(rev, reference_rev) : 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* After the safety valve is fully redefined to "check with
|
* After the safety valve is fully redefined to "check with
|
||||||
@ -160,7 +160,7 @@ static int branch_merged(int kind, const char *name,
|
|||||||
* a gentle reminder is in order.
|
* a gentle reminder is in order.
|
||||||
*/
|
*/
|
||||||
if ((head_rev != reference_rev) &&
|
if ((head_rev != reference_rev) &&
|
||||||
in_merge_bases(rev, head_rev) != merged) {
|
(head_rev ? in_merge_bases(rev, head_rev) : 0) != merged) {
|
||||||
if (merged)
|
if (merged)
|
||||||
warning(_("deleting branch '%s' that has been merged to\n"
|
warning(_("deleting branch '%s' that has been merged to\n"
|
||||||
" '%s', but not yet merged to HEAD."),
|
" '%s', but not yet merged to HEAD."),
|
||||||
@ -235,11 +235,8 @@ static int delete_branches(int argc, const char **argv, int force, int kinds,
|
|||||||
}
|
}
|
||||||
branch_name_pos = strcspn(fmt, "%");
|
branch_name_pos = strcspn(fmt, "%");
|
||||||
|
|
||||||
if (!force) {
|
if (!force)
|
||||||
head_rev = lookup_commit_reference(the_repository, &head_oid);
|
head_rev = lookup_commit_reference(the_repository, &head_oid);
|
||||||
if (!head_rev)
|
|
||||||
die(_("Couldn't look up commit object for HEAD"));
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0; i < argc; i++, strbuf_reset(&bname)) {
|
for (i = 0; i < argc; i++, strbuf_reset(&bname)) {
|
||||||
char *target = NULL;
|
char *target = NULL;
|
||||||
|
@ -279,6 +279,42 @@ test_expect_success 'git branch -M and -C fail on detached HEAD' '
|
|||||||
test_cmp expect err
|
test_cmp expect err
|
||||||
'
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git branch -d on orphan HEAD (merged)' '
|
||||||
|
test_when_finished git checkout main &&
|
||||||
|
git checkout --orphan orphan &&
|
||||||
|
test_when_finished "rm -rf .git/objects/commit-graph*" &&
|
||||||
|
git commit-graph write --reachable &&
|
||||||
|
git branch --track to-delete main &&
|
||||||
|
git branch -d to-delete
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git branch -d on orphan HEAD (merged, graph)' '
|
||||||
|
test_when_finished git checkout main &&
|
||||||
|
git checkout --orphan orphan &&
|
||||||
|
git branch --track to-delete main &&
|
||||||
|
git branch -d to-delete
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git branch -d on orphan HEAD (unmerged)' '
|
||||||
|
test_when_finished git checkout main &&
|
||||||
|
git checkout --orphan orphan &&
|
||||||
|
test_when_finished "git branch -D to-delete" &&
|
||||||
|
git branch to-delete main &&
|
||||||
|
test_must_fail git branch -d to-delete 2>err &&
|
||||||
|
grep "not fully merged" err
|
||||||
|
'
|
||||||
|
|
||||||
|
test_expect_success 'git branch -d on orphan HEAD (unmerged, graph)' '
|
||||||
|
test_when_finished git checkout main &&
|
||||||
|
git checkout --orphan orphan &&
|
||||||
|
test_when_finished "git branch -D to-delete" &&
|
||||||
|
git branch to-delete main &&
|
||||||
|
test_when_finished "rm -rf .git/objects/commit-graph*" &&
|
||||||
|
git commit-graph write --reachable &&
|
||||||
|
test_must_fail git branch -d to-delete 2>err &&
|
||||||
|
grep "not fully merged" err
|
||||||
|
'
|
||||||
|
|
||||||
test_expect_success 'git branch -v -d t should work' '
|
test_expect_success 'git branch -v -d t should work' '
|
||||||
git branch t &&
|
git branch t &&
|
||||||
git rev-parse --verify refs/heads/t &&
|
git rev-parse --verify refs/heads/t &&
|
||||||
|
Loading…
Reference in New Issue
Block a user