X-Git-Url: https://git.octo.it/?a=blobdiff_plain;f=git-branch.sh;h=e0501ec23f5c40134af0e6211cf1ba28e69e1d5b;hb=7612a1efdb0c0806b43db10ce784707aae874340;hp=4cd5da16f74cee6e277d33bce74242496eca94fe;hpb=36d277c72d90d32f99616072b64a2652248f5264;p=git.git diff --git a/git-branch.sh b/git-branch.sh index 4cd5da16..e0501ec2 100755 --- a/git-branch.sh +++ b/git-branch.sh @@ -1,19 +1,14 @@ #!/bin/sh -. git-sh-setup - -usage () { - echo >&2 "usage: $(basename $0)"' [-d ] | [[-f] [start-point]] - -If no arguments, show available branches and mark current branch with a star. +USAGE='[-l] [(-d | -D) ] | [[-f] []] | -r' +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 . -' - exit 1 -} +If two arguments, create a new branch based off of .' -headref=$(GIT_DIR="$GIT_DIR" git-symbolic-ref HEAD | - sed -e 's|^refs/heads/||') +SUBDIRECTORY_OK='Yes' +. git-sh-setup + +headref=$(git-symbolic-ref HEAD | sed -e 's|^refs/heads/||') delete_branch () { option="$1" @@ -37,23 +32,31 @@ 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 ;; esac + rm -f "$GIT_DIR/logs/refs/heads/$branch_name" rm -f "$GIT_DIR/refs/heads/$branch_name" echo "Deleted branch $branch_name." done exit 0 } +ls_remote_branches () { + git-rev-parse --symbolic --all | + sed -ne 's|^refs/\(remotes/\)|\1|p' | + sort +} + force= +create_log= while case "$#,$1" in 0,*) break ;; *,-*) ;; *) break ;; esac do case "$1" in @@ -61,9 +64,16 @@ do delete_branch "$@" exit ;; + -r) + ls_remote_branches + exit + ;; -f) force="$1" ;; + -l) + create_log="yes" + ;; --) shift break @@ -77,8 +87,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 @@ -113,5 +122,9 @@ then die "cannot force-update the current branch." fi fi -git update-ref "refs/heads/$branchname" $rev - +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