Skip to content

Commit

Permalink
pull: use git-rev-parse --parseopt for option parsing
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Paul Tan authored and Junio C Hamano committed Jun 2, 2015
1 parent eb2a8d9 commit e3b601d
Showing 1 changed file with 57 additions and 40 deletions.
97 changes: 57 additions & 40 deletions git-pull.sh
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down Expand Up @@ -87,57 +127,37 @@ 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 ;;
--no-ff)
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)
Expand All @@ -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)
Expand Down Expand Up @@ -196,11 +216,8 @@ do
shift
break
;;
-*)
usage
;;
*)
break
usage
;;
esac
shift
Expand Down

0 comments on commit e3b601d

Please sign in to comment.