pull: use git-rev-parse --parseopt for option parsing

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 <pyokagan@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Paul Tan 2015-06-02 22:22:53 +08:00 committed by Junio C Hamano
parent eb2a8d9ed3
commit e3b601da2a

View File

@ -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