To enable unambiguous parsing of abbreviated options, bundled short
options, separate form options and to provide consistent usage help, use
git-rev-parse --parseopt for option parsing. With this, simplify the
option parsing code.

Signed-off-by: Paul Tan <pyoka...@gmail.com>
---

Notes:
    v2
    
    * Don't use OPTIONS_KEEPDASHDASH

 git-pull.sh | 97 ++++++++++++++++++++++++++++++++++++-------------------------
 1 file changed, 57 insertions(+), 40 deletions(-)

diff --git a/git-pull.sh b/git-pull.sh
index 623ba7a..a814bf6 100755
--- a/git-pull.sh
+++ b/git-pull.sh
@@ -4,13 +4,53 @@
 #
 # Fetch one or more remote refs and merge it/them into the current HEAD.
 
-USAGE='[-n | --no-stat] [--[no-]commit] [--[no-]squash] [--[no-]ff|--ff-only] 
[--[no-]rebase|--rebase=preserve] [-s strategy]... [<fetch-options>] <repo> 
<head>...'
-LONG_USAGE='Fetch one or more remote refs and integrate it/them with the 
current HEAD.'
 SUBDIRECTORY_OK=Yes
-OPTIONS_SPEC=
+OPTIONS_KEEPDASHDASH=
+OPTIONS_STUCKLONG=Yes
+OPTIONS_SPEC="\
+git pull [options] [<repository> [<refspec>...]]
+
+Fetch one or more remote refs and integrate it/them with the current HEAD.
+--
+v,verbose                  be more verbose
+q,quiet                    be more quiet
+progress                   force progress reporting
+
+  Options related to merging
+r,rebase?false|true|preserve incorporate changes by rebasing rather than 
merging
+n!                         do not show a diffstat at the end of the merge
+stat                       show a diffstat at the end of the merge
+summary                    (synonym to --stat)
+log?n                      add (at most <n>) entries from shortlog to merge 
commit message
+squash                     create a single commit instead of doing a merge
+commit                     perform a commit if the merge succeeds (default)
+e,edit                       edit message before committing
+ff                         allow fast-forward
+ff-only!                   abort if fast-forward is not possible
+verify-signatures          verify that the named commit has a valid GPG 
signature
+s,strategy=strategy        merge strategy to use
+X,strategy-option=option   option for selected merge strategy
+S,gpg-sign?key-id          GPG sign commit
+
+  Options related to fetching
+all                        fetch from all remotes
+a,append                   append to .git/FETCH_HEAD instead of overwriting
+upload-pack=path           path to upload pack on remote end
+f,force                    force overwrite of local branch
+t,tags                     fetch all tags and associated objects
+p,prune                    prune remote-tracking branches no longer on remote
+recurse-submodules?on-demand control recursive fetching of submodules
+dry-run                    dry run
+k,keep                     keep downloaded pack
+depth=depth                deepen history of shallow clone
+unshallow                  convert to a complete repository
+update-shallow             accept refs that update .git/shallow
+refmap=refmap              specify fetch refmap
+"
+test $# -gt 0 && args="$*"
 . git-sh-setup
 . git-sh-i18n
-set_reflog_action "pull${1+ $*}"
+set_reflog_action "pull${args+ $args}"
 require_work_tree_exists
 cd_to_toplevel
 
@@ -87,17 +127,17 @@ do
                diffstat=--stat ;;
        --log|--log=*|--no-log)
                log_arg="$1" ;;
-       --no-c|--no-co|--no-com|--no-comm|--no-commi|--no-commit)
+       --no-commit)
                no_commit=--no-commit ;;
-       --c|--co|--com|--comm|--commi|--commit)
+       --commit)
                no_commit=--commit ;;
        -e|--edit)
                edit=--edit ;;
        --no-edit)
                edit=--no-edit ;;
-       --sq|--squ|--squa|--squas|--squash)
+       --squash)
                squash=--squash ;;
-       --no-sq|--no-squ|--no-squa|--no-squas|--no-squash)
+       --no-squash)
                squash=--no-squash ;;
        --ff)
                no_ff=--ff ;;
@@ -105,39 +145,19 @@ do
                no_ff=--no-ff ;;
        --ff-only)
                ff_only=--ff-only ;;
-       -s=*|--s=*|--st=*|--str=*|--stra=*|--strat=*|--strate=*|\
-               --strateg=*|--strategy=*|\
-       -s|--s|--st|--str|--stra|--strat|--strate|--strateg|--strategy)
-               case "$#,$1" in
-               *,*=*)
-                       strategy=$(expr "z$1" : 'z-[^=]*=\(.*\)') ;;
-               1,*)
-                       usage ;;
-               *)
-                       strategy="$2"
-                       shift ;;
-               esac
-               strategy_args="${strategy_args}-s $strategy "
+       -s*|--strategy=*)
+               strategy_args="$strategy_args $1"
                ;;
-       -X*)
-               case "$#,$1" in
-               1,-X)
-                       usage ;;
-               *,-X)
-                       xx="-X $(git rev-parse --sq-quote "$2")"
-                       shift ;;
-               *,*)
-                       xx=$(git rev-parse --sq-quote "$1") ;;
-               esac
-               merge_args="$merge_args$xx "
+       -X*|--strategy-option=*)
+               merge_args="$merge_args $(git rev-parse --sq-quote "$1")"
                ;;
-       -r=*|--r=*|--re=*|--reb=*|--reba=*|--rebas=*|--rebase=*)
+       -r*|--rebase=*)
                rebase="${1#*=}"
                ;;
-       -r|--r|--re|--reb|--reba|--rebas|--rebase)
+       --rebase)
                rebase=true
                ;;
-       --no-r|--no-re|--no-reb|--no-reba|--no-rebas|--no-rebase)
+       --no-rebase)
                rebase=false
                ;;
        --recurse-submodules)
@@ -164,7 +184,7 @@ do
        -S*)
                gpg_sign_args=$(git rev-parse --sq-quote "$1")
                ;;
-       --d|--dr|--dry|--dry-|--dry-r|--dry-ru|--dry-run)
+       --dry-run)
                dry_run=--dry-run
                ;;
        --all|--no-all)
@@ -196,11 +216,8 @@ do
                shift
                break
                ;;
-       -*)
-               usage
-               ;;
        *)
-               break
+               usage
                ;;
        esac
        shift
-- 
2.1.4

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to