core.logallrefupdates create new log file only for branch heads.
[gitweb.git] / git-branch.sh
index ebcc8989d8cfd9d64f0e4cacd0a0ff76f50d1345..4379a07210cf30c5d6e5abdb36722985983edb46 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-USAGE='[(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]] | -r'
+USAGE='[-l] [(-d | -D) <branchname>] | [[-f] <branchname> [<start-point>]] | -r'
 LONG_USAGE='If no arguments, show available branches and mark current branch with a star.
 If one argument, create a new branch <branchname> based off of current HEAD.
 If two arguments, create a new branch <branchname> based off of <start-point>.'
@@ -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,7 +42,7 @@ If you are sure you want to delete it, run 'git branch -D $branch_name'."
            esac
            ;;
        esac
-       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
@@ -55,6 +55,7 @@ ls_remote_branches () {
 }
 
 force=
+create_log=
 while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac
 do
        case "$1" in
@@ -69,6 +70,9 @@ do
        -f)
                force="$1"
                ;;
+       -l)
+               create_log="yes"
+               ;;
        --)
                shift
                break
@@ -82,8 +86,7 @@ done
 
 case "$#" in
 0)
-       git-rev-parse --symbolic --all |
-       sed -ne 's|^refs/heads/||p' |
+       git-rev-parse --symbolic --branches |
        sort |
        while read ref
        do
@@ -108,7 +111,8 @@ rev=$(git-rev-parse --verify "$head") || exit
 git-check-ref-format "heads/$branchname" ||
        die "we do not like '$branchname' as a branch name."
 
-if [ -e "$GIT_DIR/refs/heads/$branchname" ]
+prev=''
+if git-show-ref --verify --quiet -- "refs/heads/$branchname"
 then
        if test '' = "$force"
        then
@@ -117,5 +121,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 "refs/heads/$branchname" $rev
+git update-ref -m "branch: Created from $head" "refs/heads/$branchname" "$rev" "$prev"