This change allows, for instance
git branch -d refs/heads/foo
to succeed. Without this patch, the code just assumes that the
given branch name should be appended to "refs/heads" or
"refs/remotes", thus attempting (and failing) in the above case
to delete "refs/heads/refs/heads/foo"
Signed-off-by: Mark Levedahl <redacted>
---
builtin-branch.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/builtin-branch.c b/builtin-branch.c
index ca81d72..f433bc5 100644
--- a/builtin-branch.c
+++ b/builtin-branch.c
@@ -131,7 +131,11 @@ static int delete_branches(int argc, const char **argv, int force, int kinds)
free(name);
- name = xstrdup(mkpath(fmt, bname.buf));
+ if (bname.len < 5 || memcmp("refs/", bname.buf, 5))
+ name = xstrdup(mkpath(fmt, bname.buf));
+ else
+ name = xstrdup(bname.buf);
+
if (!resolve_ref(name, sha1, 1, NULL)) {
error("%sbranch '%s' not found.",
remote, bname.buf);--
1.6.2.2.27.g034b