git-branch: remove D/F check done by hand.
[gitweb.git] / git-branch.sh
index 4f31903d63662db7d49d3d257e328004ca2958f7..bf84b30695fdeda5d5e18456813e0b3cc3d11275 100755 (executable)
@@ -21,7 +21,7 @@ delete_branch () {
        ,,)
            die "What branch are you on anyway?" ;;
        esac
-       branch=$(cat "$GIT_DIR/refs/heads/$branch_name") &&
+       branch=$(git-show-ref --verify --hash -- "refs/heads/$branch_name") &&
            branch=$(git-rev-parse --verify "$branch^0") ||
                die "Seriously, what branch are you talking about?"
        case "$option" in
@@ -42,8 +42,7 @@ If you are sure you want to delete it, run 'git branch -D $branch_name'."
            esac
            ;;
        esac
-       rm -f "$GIT_DIR/logs/refs/heads/$branch_name"
-       rm -f "$GIT_DIR/refs/heads/$branch_name"
+       git update-ref -d "refs/heads/$branch_name" "$branch"
        echo "Deleted branch $branch_name."
     done
     exit 0
@@ -122,7 +121,8 @@ then
        done
 fi
 
-if [ -e "$GIT_DIR/refs/heads/$branchname" ]
+prev=''
+if git-show-ref --verify --quiet -- "refs/heads/$branchname"
 then
        if test '' = "$force"
        then
@@ -131,10 +131,11 @@ then
        then
                die "cannot force-update the current branch."
        fi
+       prev=`git rev-parse --verify "refs/heads/$branchname"`
 fi
 if test "$create_log" = 'yes'
 then
        mkdir -p $(dirname "$GIT_DIR/logs/refs/heads/$branchname")
        touch "$GIT_DIR/logs/refs/heads/$branchname"
 fi
-git update-ref -m "branch: Created from $head" "refs/heads/$branchname" $rev
+git update-ref -m "branch: Created from $head" "refs/heads/$branchname" "$rev" "$prev"