From 13d1cc3604a1a64cb5a6025bba8af8b74a373963 Mon Sep 17 00:00:00 2001 From: Junio C Hamano Date: Wed, 2 Nov 2005 12:17:47 -0800 Subject: [PATCH] Do not fail on hierarchical branch names. "git-checkout -b frotz/nitfol master" failed to create $GIT_DIR/refs/heads/frotz/nitfol but went ahead and updated $GIT_DIR/HEAD to point at it, resulting in a corrupt repository. Exit when we cannot create the new branch with an error status. While we are at it, there is no reason to forbid subdirectories in refs/heads, so make sure we handle that correctly. Signed-off-by: Junio C Hamano --- git-branch.sh | 2 ++ git-checkout.sh | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/git-branch.sh b/git-branch.sh index e2db9063d4..67f113acb9 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -102,4 +102,6 @@ rev=$(git-rev-parse --verify "$head") || exit git-check-ref-format "heads/$branchname" || die "we do not like '$branchname' as a branch name." +leading=`expr "refs/heads/$branchname" : '\(.*\)/'` && +mkdir -p "$GIT_DIR/$leading" && echo $rev > "$GIT_DIR/refs/heads/$branchname" diff --git a/git-checkout.sh b/git-checkout.sh index cb33fdc7e2..4c08f36b59 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -126,7 +126,9 @@ fi # if [ "$?" -eq 0 ]; then if [ "$newbranch" ]; then - echo $new > "$GIT_DIR/refs/heads/$newbranch" + leading=`expr "refs/heads/$newbranch" : '\(.*\)/'` && + mkdir -p "$GIT_DIR/$leading" && + echo $new >"$GIT_DIR/refs/heads/$newbranch" || exit branch="$newbranch" fi [ "$branch" ] &&