X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-branch.sh;h=5306b2719ffbedfa077f4d5489ab46448ef5c186;hb=7b9b4c452c793d0f8e3ff9f0b7fe526448fc314a;hp=e2db9063d4c63288c5834046962290ff9dfca127;hpb=1301c6eb412e7c5511b952a12e42c70ad56f028b;p=git.git diff --git a/git-branch.sh b/git-branch.sh index e2db9063..5306b271 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -1,9 +1,14 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" +GIT_DIR=`git-rev-parse --git-dir` || exit $? + +die () { + echo >&2 "$*" + exit 1 +} usage () { - echo >&2 "usage: $(basename $0)"' [-d ] | [ [start-point]] + echo >&2 "usage: $(basename $0)"' [-d ] | [[-f] [start-point]] If no arguments, show available branches and mark current branch with a star. If one argument, create a new branch based off of current HEAD. @@ -12,11 +17,11 @@ If two arguments, create a new branch based off of . exit 1 } +headref=$(git-symbolic-ref HEAD | sed -e 's|^refs/heads/||') + delete_branch () { option="$1" shift - headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | - sed -e 's|^refs/heads/||') for branch_name do case ",$headref," in @@ -52,6 +57,7 @@ delete_branch () { exit 0 } +force= while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac do case "$1" in @@ -59,6 +65,9 @@ do delete_branch "$@" exit ;; + -f) + force="$1" + ;; --) shift break @@ -72,8 +81,6 @@ done case "$#" in 0) - headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | - sed -e 's|^refs/heads/||') git-rev-parse --symbolic --all | sed -ne 's|^refs/heads/||p' | sort | @@ -97,9 +104,17 @@ branchname="$1" rev=$(git-rev-parse --verify "$head") || exit -[ -e "$GIT_DIR/refs/heads/$branchname" ] && - die "$branchname already exists." git-check-ref-format "heads/$branchname" || die "we do not like '$branchname' as a branch name." -echo $rev > "$GIT_DIR/refs/heads/$branchname" +if [ -e "$GIT_DIR/refs/heads/$branchname" ] +then + if test '' = "$force" + then + die "$branchname already exists." + elif test "$branchname" = "$headref" + then + die "cannot force-update the current branch." + fi +fi +git update-ref "refs/heads/$branchname" $rev