git-branch -D: make it work even when on a yet-to-be-born branch
This makes "git branch -D other_branch" work even when HEAD points at a yet-to-be-born branch. Earlier, we checked the HEAD ref for the purpose of "subset" check even when the deletion was forced (i.e. not -d but -D). Because of this, you cannot delete a branch even with -D while on a yet-to-be-born branch. With this change, the following sequence that now works: mkdir newdir && cd newdir git init-db git fetch -k $other_repo refs/heads/master:refs/heads/othre # oops, typo git branch other othre git branch -D othre Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
75e6e21320
commit
67affd5173
@ -38,12 +38,16 @@ static int in_merge_bases(const unsigned char *sha1,
|
|||||||
|
|
||||||
static void delete_branches(int argc, const char **argv, int force)
|
static void delete_branches(int argc, const char **argv, int force)
|
||||||
{
|
{
|
||||||
struct commit *rev, *head_rev;
|
struct commit *rev, *head_rev = head_rev;
|
||||||
unsigned char sha1[20];
|
unsigned char sha1[20];
|
||||||
char *name;
|
char *name;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
head_rev = lookup_commit_reference(head_sha1);
|
if (!force) {
|
||||||
|
head_rev = lookup_commit_reference(head_sha1);
|
||||||
|
if (!head_rev)
|
||||||
|
die("Couldn't look up commit object for HEAD");
|
||||||
|
}
|
||||||
for (i = 0; i < argc; i++) {
|
for (i = 0; i < argc; i++) {
|
||||||
if (!strcmp(head, argv[i]))
|
if (!strcmp(head, argv[i]))
|
||||||
die("Cannot delete the branch you are currently on.");
|
die("Cannot delete the branch you are currently on.");
|
||||||
@ -53,8 +57,8 @@ static void delete_branches(int argc, const char **argv, int force)
|
|||||||
die("Branch '%s' not found.", argv[i]);
|
die("Branch '%s' not found.", argv[i]);
|
||||||
|
|
||||||
rev = lookup_commit_reference(sha1);
|
rev = lookup_commit_reference(sha1);
|
||||||
if (!rev || !head_rev)
|
if (!rev)
|
||||||
die("Couldn't look up commit objects.");
|
die("Couldn't look up commit object for '%s'", name);
|
||||||
|
|
||||||
/* This checks whether the merge bases of branch and
|
/* This checks whether the merge bases of branch and
|
||||||
* HEAD contains branch -- which means that the HEAD
|
* HEAD contains branch -- which means that the HEAD
|
||||||
|
Loading…
Reference in New Issue
Block a user