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)
|
||||
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
|
||||
@ -160,7 +160,7 @@ static int branch_merged(int kind, const char *name,
|
||||
* a gentle reminder is in order.
|
||||
*/
|
||||
if ((head_rev != reference_rev) &&
|
||||
in_merge_bases(rev, head_rev) != merged) {
|
||||
(head_rev ? in_merge_bases(rev, head_rev) : 0) != merged) {
|
||||
if (merged)
|
||||
warning(_("deleting branch '%s' that has been merged to\n"
|
||||
" '%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, "%");
|
||||
|
||||
if (!force) {
|
||||
if (!force)
|
||||
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)) {
|
||||
char *target = NULL;
|
||||
|
@ -279,6 +279,42 @@ test_expect_success 'git branch -M and -C fail on detached HEAD' '
|
||||
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' '
|
||||
git branch t &&
|
||||
git rev-parse --verify refs/heads/t &&
|
||||
|
Loading…
Reference in New Issue
Block a user