aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Couder <chriscool@tuxfamily.org>2006-09-26 07:23:37 +0200
committerJunio C Hamano <junkio@cox.net>2006-09-25 23:54:40 -0700
commit9c7b0b3fc46e552bde1a65cd1950c3634854332b (patch)
tree7738ab6f8365a842c6862b6726a6fc9e70e08e68
parent4dafd7d2444051fe0e1eb17e9ded503ad7d9dd25 (diff)
downloadgit-9c7b0b3fc46e552bde1a65cd1950c3634854332b.tar.gz
git-9c7b0b3fc46e552bde1a65cd1950c3634854332b.tar.xz
Remove empty ref directories that prevent creating a ref.
This patch also adds test cases from Linus and Junio. Signed-off-by: Christian Couder <chriscool@tuxfamily.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
-rwxr-xr-xgit-branch.sh10
-rwxr-xr-xt/t3200-branch.sh12
2 files changed, 22 insertions, 0 deletions
diff --git a/git-branch.sh b/git-branch.sh
index e0501ec23..4f31903d6 100755
--- a/git-branch.sh
+++ b/git-branch.sh
@@ -112,6 +112,16 @@ rev=$(git-rev-parse --verify "$head") || exit
git-check-ref-format "heads/$branchname" ||
die "we do not like '$branchname' as a branch name."
+if [ -d "$GIT_DIR/refs/heads/$branchname" ]
+then
+ for refdir in `cd "$GIT_DIR" && \
+ find "refs/heads/$branchname" -type d | sort -r`
+ do
+ rmdir "$GIT_DIR/$refdir" || \
+ die "Could not delete '$refdir', there may still be a ref there."
+ done
+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 5b04efc89..6907cbcd2 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