diff options
author | Pierre Habouzit <madcoder@debian.org> | 2007-11-04 11:31:00 +0100 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2007-11-05 22:48:13 -0800 |
commit | 00df3bed2bf77ad31094e6d064d2c4f069086b41 (patch) | |
tree | c3fb0112fa04c839e5032025a04e9f6f41fc2e74 | |
parent | c2db2e0ef1df6ea2d0aeca1df347c7143a1a2e1c (diff) | |
download | git-00df3bed2bf77ad31094e6d064d2c4f069086b41.tar.gz git-00df3bed2bf77ad31094e6d064d2c4f069086b41.tar.xz |
Migrate git-checkout.sh to use git-rev-parse --parseopt --keep-dashdash
Also fix some space versus tabs issues.
Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rwxr-xr-x | git-checkout.sh | 99 |
1 files changed, 49 insertions, 50 deletions
diff --git a/git-checkout.sh b/git-checkout.sh index 899392067..c00cedd48 100755 --- a/git-checkout.sh +++ b/git-checkout.sh @@ -1,6 +1,16 @@ #!/bin/sh -USAGE='[-q] [-f] [-b <new_branch>] [-m] [<branch>] [<paths>...]' +OPTIONS_KEEPDASHDASH=t +OPTIONS_SPEC="\ +git-branch [options] [<branch>] [<paths>...] +-- +b= create a new branch started at <branch> +l create the new branchs reflog +track tells if the new branch should track the remote branch +f proceed even if the index or working tree is not HEAD +m performa three-way merge on local modifications if needed +q,quiet be quiet +" SUBDIRECTORY_OK=Sometimes . git-sh-setup require_work_tree @@ -20,13 +30,12 @@ quiet= v=-v LF=' ' -while [ "$#" != "0" ]; do - arg="$1" - shift - case "$arg" in - "-b") - newbranch="$1" + +while test $# != 0; do + case "$1" in + -b) shift + newbranch="$1" [ -z "$newbranch" ] && die "git checkout: -b needs a branch name" git show-ref --verify --quiet -- "refs/heads/$newbranch" && @@ -34,64 +43,54 @@ while [ "$#" != "0" ]; do git check-ref-format "heads/$newbranch" || die "git checkout: we do not like '$newbranch' as a branch name." ;; - "-l") + -l) newbranch_log=-l ;; - "--track"|"--no-track") - track="$arg" + --track|--no-track) + track="$1" ;; - "-f") + -f) force=1 ;; -m) merge=1 ;; - "-q") + -q|--quiet) quiet=1 v= ;; --) + shift break ;; - -*) - usage - ;; *) - if rev=$(git rev-parse --verify "$arg^0" 2>/dev/null) - then - if [ -z "$rev" ]; then - echo "unknown flag $arg" - exit 1 - fi - new_name="$arg" - if git show-ref --verify --quiet -- "refs/heads/$arg" - then - rev=$(git rev-parse --verify "refs/heads/$arg^0") - branch="$arg" - fi - new="$rev" - elif rev=$(git rev-parse --verify "$arg^{tree}" 2>/dev/null) - then - # checking out selected paths from a tree-ish. - new="$rev" - new_name="$arg^{tree}" - branch= - else - new= - new_name= - branch= - set x "$arg" "$@" - shift - fi - case "$1" in - --) - shift ;; - esac - break + usage ;; - esac + esac + shift done +arg="$1" +if rev=$(git rev-parse --verify "$arg^0" 2>/dev/null) +then + [ -z "$rev" ] && die "unknown flag $arg" + new_name="$arg" + if git show-ref --verify --quiet -- "refs/heads/$arg" + then + rev=$(git rev-parse --verify "refs/heads/$arg^0") + branch="$arg" + fi + new="$rev" + shift +elif rev=$(git rev-parse --verify "$arg^{tree}" 2>/dev/null) +then + # checking out selected paths from a tree-ish. + new="$rev" + new_name="$arg^{tree}" + shift +fi +[ "$1" = "--" ] && shift + case "$newbranch,$track" in ,--*) die "git checkout: --track and --no-track require -b" @@ -138,8 +137,8 @@ Did you intend to checkout '$@' which can not be resolved as commit?" git ls-files -- "$@" | git checkout-index -f -u --stdin - # Run a post-checkout hook -- the HEAD does not change so the - # current HEAD is passed in for both args + # Run a post-checkout hook -- the HEAD does not change so the + # current HEAD is passed in for both args if test -x "$GIT_DIR"/hooks/post-checkout; then "$GIT_DIR"/hooks/post-checkout $old $old 0 fi @@ -294,5 +293,5 @@ fi # Run a post-checkout hook if test -x "$GIT_DIR"/hooks/post-checkout; then - "$GIT_DIR"/hooks/post-checkout $old $new 1 + "$GIT_DIR"/hooks/post-checkout $old $new 1 fi |