[PATCH] Remove empty ref directories that prevent creating a ref.
From: Christian Couder <hidden>
Date: 2016-06-15 22:42:41
Subsystem:
the rest · Maintainer:
Linus Torvalds
Junio wrote:
"BTW, the second issue exists without packed ref; currently we
cannot do
git branch foo/bar
git branch -d foo/bar
git branch foo"
This patch also add Linus and Junio test cases.
Signed-off-by: Christian Couder <redacted>
---
This fixed patch also applies to master, that's why it doesn't
contain test cases using "git pack-refs". I will send a separate
patch for them latter.
git-branch.sh | 16 ++++++++++++++++
t/t3200-branch.sh | 12 ++++++++++++
2 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/git-branch.sh b/git-branch.sh
index e0501ec..834888d 100755
--- a/git-branch.sh
+++ b/git-branch.sh@@ -112,6 +112,22 @@ rev=$(git-rev-parse --verify "$head") || git-check-ref-format "heads/$branchname" || die "we do not like '$branchname' as a branch name." +LF=' +' + +if [ -d "$GIT_DIR/refs/heads/$branchname" ] +then + OLD_IFS="$IFS" + IFS="$LF" + for refdir in `find "$GIT_DIR/refs/heads/$branchname" -type d | sort -r` + do + rmdir "$refdir" || \ + die "Could not delete '$refdir'," \ + "there may still be a ref there." + done + IFS="$OLD_IFS" +fi + if [ -e "$GIT_DIR/refs/heads/$branchname" ] then if test '' = "$force"
diff --git a/t/t3200-branch.sh b/t/t3200-branch.sh
index 5b04efc..6907cbc 100755
--- a/t/t3200-branch.sh
+++ b/t/t3200-branch.sh@@ -61,4 +61,16 @@ test_expect_success \ test -f .git/logs/refs/heads/g/h/i && diff expect .git/logs/refs/heads/g/h/i' +test_expect_success \ + 'git branch j/k should work after branch j has been deleted' \ + 'git-branch j && + git-branch -d j && + git-branch j/k' + +test_expect_success \ + 'git branch l should work after branch l/m has been deleted' \ + 'git-branch l/m && + git-branch -d l/m && + git-branch l' + test_done
--
1.4.2.1.ged17-dirty