X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-branch.sh;h=663a3a370c8889e2ba78d627811c652d41e7971b;hb=9acf322d69f54ff5bf9de8b2d6f9cd1dccf523a3;hp=67f113acb9abc2bbcd444de42326854bdd88ba4a;hpb=72e5890b68e7199d92620d3bba91fa36dd259404;p=git.git diff --git a/git-branch.sh b/git-branch.sh index 67f113ac..663a3a37 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -1,22 +1,18 @@ #!/bin/sh -. git-sh-setup || die "Not a git archive" +USAGE='[(-d | -D) ] | [[-f] []]' +LONG_USAGE='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. +If two arguments, create a new branch based off of .' -usage () { - echo >&2 "usage: $(basename $0)"' [-d ] | [ [start-point]] +SUBDIRECTORY_OK='Yes' +. git-sh-setup -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. -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 @@ -36,11 +32,11 @@ delete_branch () { case " $mbs " in *' '$branch' '*) # the merge base of branch and HEAD contains branch -- - # which means that the HEAD contains everything in the HEAD. + # which means that the HEAD contains everything in both. ;; *) echo >&2 "The branch '$branch_name' is not a strict subset of your current HEAD. - If you are sure you want to delete it, run 'git branch -D $branch_name'." +If you are sure you want to delete it, run 'git branch -D $branch_name'." exit 1 ;; esac @@ -52,6 +48,13 @@ delete_branch () { exit 0 } +ls_remote_branches () { + git-rev-parse --symbolic --all | + sed -ne 's|^refs/\(remotes/\)|\1|p' | + sort +} + +force= while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac do case "$1" in @@ -59,6 +62,13 @@ do delete_branch "$@" exit ;; + -r) + ls_remote_branches + exit + ;; + -f) + force="$1" + ;; --) shift break @@ -72,8 +82,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,11 +105,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." -leading=`expr "refs/heads/$branchname" : '\(.*\)/'` && -mkdir -p "$GIT_DIR/$leading" && -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