]> git.ipfire.org Git - thirdparty/git.git/blame - contrib/completion/git-completion.bash
git-merge.sh: fix typo in usage message: sucesses --> succeeds
[thirdparty/git.git] / contrib / completion / git-completion.bash
CommitLineData
690d8824
JH
1#
2# bash completion support for core Git.
3#
c70680ce 4# Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
690d8824 5# Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
c70680ce 6# Distributed under the GNU General Public License, version 2.0.
690d8824
JH
7#
8# The contained completion routines provide support for completing:
9#
10# *) local and remote branch names
11# *) local and remote tag names
12# *) .git/remotes file names
13# *) git 'subcommands'
14# *) tree paths within 'ref:path/to/file' expressions
c70680ce 15# *) common --long-options
690d8824
JH
16#
17# To use these routines:
18#
19# 1) Copy this file to somewhere (e.g. ~/.git-completion.sh).
20# 2) Added the following line to your .bashrc:
21# source ~/.git-completion.sh
22#
b51ec6bd
SP
23# 3) You may want to make sure the git executable is available
24# in your PATH before this script is sourced, as some caching
25# is performed while the script loads. If git isn't found
26# at source time then all lookups will be done on demand,
27# which may be slightly slower.
28#
29# 4) Consider changing your PS1 to also show the current branch:
d3d717a4
SP
30# PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
31#
32# The argument to __git_ps1 will be displayed only if you
33# are currently in a git repository. The %s token will be
34# the name of the current branch.
35#
c70680ce
SP
36# To submit patches:
37#
38# *) Read Documentation/SubmittingPatches
39# *) Send all patches to the current maintainer:
40#
41# "Shawn O. Pearce" <spearce@spearce.org>
42#
43# *) Always CC the Git mailing list:
44#
45# git@vger.kernel.org
46#
690d8824 47
873537fa
SP
48__gitdir ()
49{
67ffa114
SP
50 if [ -z "$1" ]; then
51 if [ -n "$__git_dir" ]; then
52 echo "$__git_dir"
53 elif [ -d .git ]; then
54 echo .git
55 else
56 git rev-parse --git-dir 2>/dev/null
57 fi
58 elif [ -d "$1/.git" ]; then
59 echo "$1/.git"
60 else
61 echo "$1"
62 fi
873537fa
SP
63}
64
d3d717a4
SP
65__git_ps1 ()
66{
e7520196
RR
67 local g="$(git rev-parse --git-dir 2>/dev/null)"
68 if [ -n "$g" ]; then
69 local r
70 local b
71 if [ -d "$g/../.dotest" ]
72 then
3041c324
JH
73 if test -f "$g/../.dotest/rebasing"
74 then
75 r="|REBASE"
76 elif test -f "$g/../.dotest/applying"
77 then
78 r="|AM"
79 else
80 r="|AM/REBASE"
81 fi
e7520196
RR
82 b="$(git symbolic-ref HEAD 2>/dev/null)"
83 elif [ -f "$g/.dotest-merge/interactive" ]
84 then
85 r="|REBASE-i"
a5c4f85b 86 b="$(cat "$g/.dotest-merge/head-name")"
e7520196
RR
87 elif [ -d "$g/.dotest-merge" ]
88 then
89 r="|REBASE-m"
a5c4f85b 90 b="$(cat "$g/.dotest-merge/head-name")"
e7520196
RR
91 elif [ -f "$g/MERGE_HEAD" ]
92 then
93 r="|MERGING"
94 b="$(git symbolic-ref HEAD 2>/dev/null)"
95 else
a5c4f85b 96 if [ -f "$g/BISECT_LOG" ]
e7520196
RR
97 then
98 r="|BISECTING"
99 fi
100 if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
101 then
27c57888
SP
102 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
103 then
a5c4f85b 104 b="$(cut -c1-7 "$g/HEAD")..."
27c57888 105 fi
e7520196
RR
106 fi
107 fi
108
d3d717a4 109 if [ -n "$1" ]; then
e7520196 110 printf "$1" "${b##refs/heads/}$r"
d3d717a4 111 else
e7520196 112 printf " (%s)" "${b##refs/heads/}$r"
d3d717a4
SP
113 fi
114 fi
115}
116
72e5e989
SP
117__gitcomp ()
118{
119 local all c s=$'\n' IFS=' '$'\t'$'\n'
78d4d6a2 120 local cur="${COMP_WORDS[COMP_CWORD]}"
b3391775 121 if [ $# -gt 2 ]; then
78d4d6a2
SP
122 cur="$3"
123 fi
5447aac7
SG
124 case "$cur" in
125 --*=)
126 COMPREPLY=()
127 return
128 ;;
129 *)
130 for c in $1; do
131 case "$c$4" in
132 --*=*) all="$all$c$4$s" ;;
133 *.) all="$all$c$4$s" ;;
134 *) all="$all$c$4 $s" ;;
135 esac
136 done
137 ;;
138 esac
72e5e989 139 IFS=$s
78d4d6a2 140 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
72e5e989
SP
141 return
142}
143
5de40f59
SP
144__git_heads ()
145{
67ffa114 146 local cmd i is_hash=y dir="$(__gitdir "$1")"
5de40f59
SP
147 if [ -d "$dir" ]; then
148 for i in $(git --git-dir="$dir" \
149 for-each-ref --format='%(refname)' \
150 refs/heads ); do
151 echo "${i#refs/heads/}"
152 done
153 return
154 fi
799596a5 155 for i in $(git ls-remote "$1" 2>/dev/null); do
5de40f59
SP
156 case "$is_hash,$i" in
157 y,*) is_hash=n ;;
158 n,*^{}) is_hash=y ;;
159 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
160 n,*) is_hash=y; echo "$i" ;;
161 esac
162 done
163}
164
88e21dc7
SP
165__git_tags ()
166{
167 local cmd i is_hash=y dir="$(__gitdir "$1")"
168 if [ -d "$dir" ]; then
169 for i in $(git --git-dir="$dir" \
170 for-each-ref --format='%(refname)' \
171 refs/tags ); do
172 echo "${i#refs/tags/}"
173 done
174 return
175 fi
799596a5 176 for i in $(git ls-remote "$1" 2>/dev/null); do
88e21dc7
SP
177 case "$is_hash,$i" in
178 y,*) is_hash=n ;;
179 n,*^{}) is_hash=y ;;
180 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
181 n,*) is_hash=y; echo "$i" ;;
182 esac
183 done
184}
185
690d8824
JH
186__git_refs ()
187{
67ffa114 188 local cmd i is_hash=y dir="$(__gitdir "$1")"
873537fa 189 if [ -d "$dir" ]; then
35e65ecc
SP
190 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
191 for i in $(git --git-dir="$dir" \
192 for-each-ref --format='%(refname)' \
193 refs/tags refs/heads refs/remotes); do
194 case "$i" in
195 refs/tags/*) echo "${i#refs/tags/}" ;;
196 refs/heads/*) echo "${i#refs/heads/}" ;;
197 refs/remotes/*) echo "${i#refs/remotes/}" ;;
198 *) echo "$i" ;;
199 esac
200 done
201 return
690d8824 202 fi
799596a5 203 for i in $(git ls-remote "$dir" 2>/dev/null); do
690d8824
JH
204 case "$is_hash,$i" in
205 y,*) is_hash=n ;;
206 n,*^{}) is_hash=y ;;
207 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
208 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
35e65ecc 209 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
690d8824
JH
210 n,*) is_hash=y; echo "$i" ;;
211 esac
212 done
213}
214
215__git_refs2 ()
216{
67ffa114
SP
217 local i
218 for i in $(__git_refs "$1"); do
219 echo "$i:$i"
690d8824
JH
220 done
221}
222
5de40f59
SP
223__git_refs_remotes ()
224{
225 local cmd i is_hash=y
799596a5 226 for i in $(git ls-remote "$1" 2>/dev/null); do
5de40f59
SP
227 case "$is_hash,$i" in
228 n,refs/heads/*)
229 is_hash=y
230 echo "$i:refs/remotes/$1/${i#refs/heads/}"
231 ;;
232 y,*) is_hash=n ;;
233 n,*^{}) is_hash=y ;;
234 n,refs/tags/*) is_hash=y;;
235 n,*) is_hash=y; ;;
236 esac
237 done
238}
239
690d8824
JH
240__git_remotes ()
241{
873537fa 242 local i ngoff IFS=$'\n' d="$(__gitdir)"
56fc25f2 243 shopt -q nullglob || ngoff=1
690d8824 244 shopt -s nullglob
873537fa
SP
245 for i in "$d/remotes"/*; do
246 echo ${i#$d/remotes/}
690d8824 247 done
56fc25f2 248 [ "$ngoff" ] && shopt -u nullglob
e0d10e1c 249 for i in $(git --git-dir="$d" config --list); do
56fc25f2
SP
250 case "$i" in
251 remote.*.url=*)
252 i="${i#remote.}"
253 echo "${i/.url=*/}"
254 ;;
255 esac
256 done
690d8824
JH
257}
258
4ad91321
SP
259__git_merge_strategies ()
260{
b51ec6bd
SP
261 if [ -n "$__git_merge_strategylist" ]; then
262 echo "$__git_merge_strategylist"
263 return
264 fi
4ad91321
SP
265 sed -n "/^all_strategies='/{
266 s/^all_strategies='//
267 s/'//
268 p
269 q
270 }" "$(git --exec-path)/git-merge"
271}
b51ec6bd
SP
272__git_merge_strategylist=
273__git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
4ad91321 274
690d8824
JH
275__git_complete_file ()
276{
a79c6551 277 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
690d8824
JH
278 case "$cur" in
279 ?*:*)
a79c6551
SP
280 ref="${cur%%:*}"
281 cur="${cur#*:}"
690d8824
JH
282 case "$cur" in
283 ?*/*)
a79c6551
SP
284 pfx="${cur%/*}"
285 cur="${cur##*/}"
690d8824
JH
286 ls="$ref:$pfx"
287 pfx="$pfx/"
288 ;;
289 *)
290 ls="$ref"
291 ;;
292 esac
293 COMPREPLY=($(compgen -P "$pfx" \
873537fa 294 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
690d8824
JH
295 | sed '/^100... blob /s,^.* ,,
296 /^040000 tree /{
297 s,^.* ,,
298 s,$,/,
299 }
300 s/^.* //')" \
301 -- "$cur"))
302 ;;
303 *)
b3391775 304 __gitcomp "$(__git_refs)"
690d8824
JH
305 ;;
306 esac
307}
308
f53352fb
SP
309__git_complete_revlist ()
310{
311 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
312 case "$cur" in
313 *...*)
314 pfx="${cur%...*}..."
315 cur="${cur#*...}"
b3391775 316 __gitcomp "$(__git_refs)" "$pfx" "$cur"
f53352fb
SP
317 ;;
318 *..*)
319 pfx="${cur%..*}.."
320 cur="${cur#*..}"
b3391775
SP
321 __gitcomp "$(__git_refs)" "$pfx" "$cur"
322 ;;
323 *.)
324 __gitcomp "$cur."
f53352fb
SP
325 ;;
326 *)
b3391775 327 __gitcomp "$(__git_refs)"
f53352fb
SP
328 ;;
329 esac
330}
331
f2bb9f88
SP
332__git_commands ()
333{
b51ec6bd
SP
334 if [ -n "$__git_commandlist" ]; then
335 echo "$__git_commandlist"
336 return
337 fi
f2bb9f88
SP
338 local i IFS=" "$'\n'
339 for i in $(git help -a|egrep '^ ')
340 do
341 case $i in
718a087a 342 *--*) : helper pattern;;
a925c6f1
SP
343 applymbox) : ask gittus;;
344 applypatch) : ask gittus;;
345 archimport) : import;;
2e3a430a 346 cat-file) : plumbing;;
56d99c67 347 check-attr) : plumbing;;
f2bb9f88
SP
348 check-ref-format) : plumbing;;
349 commit-tree) : plumbing;;
a925c6f1
SP
350 cvsexportcommit) : export;;
351 cvsimport) : import;;
f2bb9f88
SP
352 cvsserver) : daemon;;
353 daemon) : daemon;;
5cfb4fe5
SP
354 diff-files) : plumbing;;
355 diff-index) : plumbing;;
356 diff-tree) : plumbing;;
c6ec3b13 357 fast-import) : import;;
a925c6f1 358 fsck-objects) : plumbing;;
f2bb9f88 359 fetch-pack) : plumbing;;
a925c6f1 360 fmt-merge-msg) : plumbing;;
56d99c67 361 for-each-ref) : plumbing;;
f2bb9f88
SP
362 hash-object) : plumbing;;
363 http-*) : transport;;
364 index-pack) : plumbing;;
a925c6f1 365 init-db) : deprecated;;
f2bb9f88
SP
366 local-fetch) : plumbing;;
367 mailinfo) : plumbing;;
368 mailsplit) : plumbing;;
369 merge-*) : plumbing;;
370 mktree) : plumbing;;
371 mktag) : plumbing;;
372 pack-objects) : plumbing;;
373 pack-redundant) : plumbing;;
374 pack-refs) : plumbing;;
375 parse-remote) : plumbing;;
376 patch-id) : plumbing;;
377 peek-remote) : plumbing;;
a925c6f1
SP
378 prune) : plumbing;;
379 prune-packed) : plumbing;;
380 quiltimport) : import;;
f2bb9f88
SP
381 read-tree) : plumbing;;
382 receive-pack) : plumbing;;
2e3a430a 383 reflog) : plumbing;;
5c66d0d4 384 repo-config) : deprecated;;
f2bb9f88
SP
385 rerere) : plumbing;;
386 rev-list) : plumbing;;
387 rev-parse) : plumbing;;
388 runstatus) : plumbing;;
389 sh-setup) : internal;;
390 shell) : daemon;;
391 send-pack) : plumbing;;
392 show-index) : plumbing;;
393 ssh-*) : transport;;
394 stripspace) : plumbing;;
395 symbolic-ref) : plumbing;;
a925c6f1 396 tar-tree) : deprecated;;
f2bb9f88
SP
397 unpack-file) : plumbing;;
398 unpack-objects) : plumbing;;
a925c6f1 399 update-index) : plumbing;;
f2bb9f88
SP
400 update-ref) : plumbing;;
401 update-server-info) : daemon;;
402 upload-archive) : plumbing;;
403 upload-pack) : plumbing;;
404 write-tree) : plumbing;;
a925c6f1 405 verify-tag) : plumbing;;
f2bb9f88
SP
406 *) echo $i;;
407 esac
408 done
409}
b51ec6bd
SP
410__git_commandlist=
411__git_commandlist="$(__git_commands 2>/dev/null)"
f2bb9f88 412
367dce2a
DS
413__git_aliases ()
414{
56fc25f2 415 local i IFS=$'\n'
e0d10e1c 416 for i in $(git --git-dir="$(__gitdir)" config --list); do
56fc25f2
SP
417 case "$i" in
418 alias.*)
419 i="${i#alias.}"
420 echo "${i/=*/}"
421 ;;
422 esac
423 done
367dce2a
DS
424}
425
426__git_aliased_command ()
427{
873537fa 428 local word cmdline=$(git --git-dir="$(__gitdir)" \
e0d10e1c 429 config --get "alias.$1")
367dce2a
DS
430 for word in $cmdline; do
431 if [ "${word##-*}" ]; then
432 echo $word
433 return
434 fi
435 done
436}
437
3ff1320d
SG
438__git_find_subcommand ()
439{
440 local word subcommand c=1
441
442 while [ $c -lt $COMP_CWORD ]; do
443 word="${COMP_WORDS[c]}"
444 for subcommand in $1; do
445 if [ "$subcommand" = "$word" ]; then
446 echo "$subcommand"
447 return
448 fi
449 done
450 c=$((++c))
451 done
452}
453
88329195
SP
454__git_whitespacelist="nowarn warn error error-all strip"
455
456_git_am ()
457{
458 local cur="${COMP_WORDS[COMP_CWORD]}"
459 if [ -d .dotest ]; then
b3391775 460 __gitcomp "--skip --resolved"
88329195
SP
461 return
462 fi
463 case "$cur" in
464 --whitespace=*)
b3391775 465 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
88329195
SP
466 return
467 ;;
468 --*)
b3391775 469 __gitcomp "
88329195
SP
470 --signoff --utf8 --binary --3way --interactive
471 --whitespace=
b3391775 472 "
88329195
SP
473 return
474 esac
475 COMPREPLY=()
476}
477
478_git_apply ()
479{
480 local cur="${COMP_WORDS[COMP_CWORD]}"
481 case "$cur" in
482 --whitespace=*)
b3391775 483 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
88329195
SP
484 return
485 ;;
486 --*)
b3391775 487 __gitcomp "
88329195
SP
488 --stat --numstat --summary --check --index
489 --cached --index-info --reverse --reject --unidiff-zero
490 --apply --no-add --exclude=
491 --whitespace= --inaccurate-eof --verbose
b3391775 492 "
88329195
SP
493 return
494 esac
495 COMPREPLY=()
496}
497
8435b548
SP
498_git_add ()
499{
500 local cur="${COMP_WORDS[COMP_CWORD]}"
501 case "$cur" in
502 --*)
1d284cba
SG
503 __gitcomp "
504 --interactive --refresh --patch --update --dry-run
505 --ignore-errors
506 "
8435b548
SP
507 return
508 esac
509 COMPREPLY=()
510}
511
b2e69f62
SP
512_git_bisect ()
513{
3ff1320d
SG
514 local subcommands="start bad good reset visualize replay log"
515 local subcommand="$(__git_find_subcommand "$subcommands")"
516 if [ -z "$subcommand" ]; then
517 __gitcomp "$subcommands"
b2e69f62
SP
518 return
519 fi
520
3ff1320d 521 case "$subcommand" in
b2e69f62
SP
522 bad|good|reset)
523 __gitcomp "$(__git_refs)"
524 ;;
525 *)
526 COMPREPLY=()
527 ;;
528 esac
529}
530
690d8824
JH
531_git_branch ()
532{
b9217642
SG
533 local i c=1 only_local_ref="n" has_r="n"
534
535 while [ $c -lt $COMP_CWORD ]; do
536 i="${COMP_WORDS[c]}"
537 case "$i" in
538 -d|-m) only_local_ref="y" ;;
539 -r) has_r="y" ;;
540 esac
541 c=$((++c))
542 done
543
3b376b0c
SG
544 case "${COMP_WORDS[COMP_CWORD]}" in
545 --*=*) COMPREPLY=() ;;
546 --*)
547 __gitcomp "
548 --color --no-color --verbose --abbrev= --no-abbrev
549 --track --no-track
550 "
551 ;;
b9217642
SG
552 *)
553 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
554 __gitcomp "$(__git_heads)"
555 else
556 __gitcomp "$(__git_refs)"
557 fi
558 ;;
3b376b0c 559 esac
690d8824
JH
560}
561
374a58c9
ML
562_git_bundle ()
563{
564 local mycword="$COMP_CWORD"
565 case "${COMP_WORDS[0]}" in
566 git)
567 local cmd="${COMP_WORDS[2]}"
568 mycword="$((mycword-1))"
569 ;;
570 git-bundle*)
571 local cmd="${COMP_WORDS[1]}"
572 ;;
573 esac
574 case "$mycword" in
575 1)
576 __gitcomp "create list-heads verify unbundle"
577 ;;
578 2)
579 # looking for a file
580 ;;
581 *)
582 case "$cmd" in
583 create)
584 __git_complete_revlist
585 ;;
586 esac
587 ;;
588 esac
589}
590
690d8824
JH
591_git_checkout ()
592{
b3391775 593 __gitcomp "$(__git_refs)"
690d8824
JH
594}
595
d8a9fea5
SP
596_git_cherry ()
597{
598 __gitcomp "$(__git_refs)"
599}
600
1273231e
SP
601_git_cherry_pick ()
602{
603 local cur="${COMP_WORDS[COMP_CWORD]}"
604 case "$cur" in
605 --*)
b3391775 606 __gitcomp "--edit --no-commit"
1273231e
SP
607 ;;
608 *)
b3391775 609 __gitcomp "$(__git_refs)"
1273231e
SP
610 ;;
611 esac
612}
613
4548e855
SP
614_git_commit ()
615{
616 local cur="${COMP_WORDS[COMP_CWORD]}"
617 case "$cur" in
618 --*)
b3391775 619 __gitcomp "
4548e855
SP
620 --all --author= --signoff --verify --no-verify
621 --edit --amend --include --only
b3391775 622 "
4548e855
SP
623 return
624 esac
625 COMPREPLY=()
626}
627
217926c0
SP
628_git_describe ()
629{
630 __gitcomp "$(__git_refs)"
631}
632
690d8824
JH
633_git_diff ()
634{
b3a4f858
JS
635 local cur="${COMP_WORDS[COMP_CWORD]}"
636 case "$cur" in
637 --*)
638 __gitcomp "--cached --stat --numstat --shortstat --summary
639 --patch-with-stat --name-only --name-status --color
640 --no-color --color-words --no-renames --check
641 --full-index --binary --abbrev --diff-filter
642 --find-copies-harder --pickaxe-all --pickaxe-regex
643 --text --ignore-space-at-eol --ignore-space-change
644 --ignore-all-space --exit-code --quiet --ext-diff
aba201c6
PO
645 --no-ext-diff
646 --no-prefix --src-prefix= --dst-prefix=
f4574139 647 --base --ours --theirs
aba201c6 648 "
b3a4f858
JS
649 return
650 ;;
651 esac
690d8824
JH
652 __git_complete_file
653}
654
655_git_diff_tree ()
656{
b3391775 657 __gitcomp "$(__git_refs)"
690d8824
JH
658}
659
660_git_fetch ()
661{
662 local cur="${COMP_WORDS[COMP_CWORD]}"
663
664 case "${COMP_WORDS[0]},$COMP_CWORD" in
665 git-fetch*,1)
b3391775 666 __gitcomp "$(__git_remotes)"
690d8824
JH
667 ;;
668 git,2)
b3391775 669 __gitcomp "$(__git_remotes)"
690d8824
JH
670 ;;
671 *)
672 case "$cur" in
673 *:*)
b3391775 674 __gitcomp "$(__git_refs)" "" "${cur#*:}"
690d8824
JH
675 ;;
676 *)
677 local remote
678 case "${COMP_WORDS[0]}" in
679 git-fetch) remote="${COMP_WORDS[1]}" ;;
680 git) remote="${COMP_WORDS[2]}" ;;
681 esac
b3391775 682 __gitcomp "$(__git_refs2 "$remote")"
690d8824
JH
683 ;;
684 esac
685 ;;
686 esac
687}
688
f53352fb
SP
689_git_format_patch ()
690{
691 local cur="${COMP_WORDS[COMP_CWORD]}"
692 case "$cur" in
693 --*)
b3391775 694 __gitcomp "
f53352fb
SP
695 --stdout --attach --thread
696 --output-directory
697 --numbered --start-number
47e98eec 698 --numbered-files
f53352fb
SP
699 --keep-subject
700 --signoff
701 --in-reply-to=
702 --full-index --binary
ec804891 703 --not --all
be5f5bf0 704 --cover-letter
aba201c6 705 --no-prefix --src-prefix= --dst-prefix=
b3391775 706 "
f53352fb
SP
707 return
708 ;;
709 esac
710 __git_complete_revlist
711}
712
b26c8748
SP
713_git_gc ()
714{
715 local cur="${COMP_WORDS[COMP_CWORD]}"
716 case "$cur" in
717 --*)
47e98eec 718 __gitcomp "--prune --aggressive"
b26c8748
SP
719 return
720 ;;
721 esac
722 COMPREPLY=()
723}
724
690d8824
JH
725_git_ls_remote ()
726{
b3391775 727 __gitcomp "$(__git_remotes)"
690d8824
JH
728}
729
730_git_ls_tree ()
731{
732 __git_complete_file
733}
734
735_git_log ()
736{
6e31b866
SP
737 local cur="${COMP_WORDS[COMP_CWORD]}"
738 case "$cur" in
739 --pretty=*)
b3391775 740 __gitcomp "
6e31b866 741 oneline short medium full fuller email raw
b3391775 742 " "" "${cur##--pretty=}"
6e31b866
SP
743 return
744 ;;
47e98eec
SP
745 --date=*)
746 __gitcomp "
747 relative iso8601 rfc2822 short local default
748 " "" "${cur##--date=}"
749 return
750 ;;
6e31b866 751 --*)
b3391775 752 __gitcomp "
6e31b866
SP
753 --max-count= --max-age= --since= --after=
754 --min-age= --before= --until=
8f87fae6 755 --root --topo-order --date-order --reverse
47e98eec 756 --no-merges --follow
6e31b866 757 --abbrev-commit --abbrev=
47e98eec 758 --relative-date --date=
6e31b866
SP
759 --author= --committer= --grep=
760 --all-match
8f87fae6 761 --pretty= --name-status --name-only --raw
ec804891 762 --not --all
7d37b5bf 763 --left-right --cherry-pick
b3391775 764 "
6e31b866
SP
765 return
766 ;;
767 esac
f53352fb 768 __git_complete_revlist
690d8824
JH
769}
770
4ad91321
SP
771_git_merge ()
772{
773 local cur="${COMP_WORDS[COMP_CWORD]}"
ce1e39d2
SP
774 case "${COMP_WORDS[COMP_CWORD-1]}" in
775 -s|--strategy)
b3391775 776 __gitcomp "$(__git_merge_strategies)"
ce1e39d2
SP
777 return
778 esac
4ad91321 779 case "$cur" in
ce1e39d2 780 --strategy=*)
b3391775 781 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
ce1e39d2
SP
782 return
783 ;;
4ad91321 784 --*)
b3391775 785 __gitcomp "
efb779f8 786 --no-commit --no-stat --log --no-log --squash --strategy
b3391775 787 "
4ad91321
SP
788 return
789 esac
b3391775 790 __gitcomp "$(__git_refs)"
4ad91321
SP
791}
792
690d8824
JH
793_git_merge_base ()
794{
b3391775 795 __gitcomp "$(__git_refs)"
690d8824
JH
796}
797
d33909bf
SP
798_git_name_rev ()
799{
b3391775 800 __gitcomp "--tags --all --stdin"
d33909bf
SP
801}
802
690d8824
JH
803_git_pull ()
804{
805 local cur="${COMP_WORDS[COMP_CWORD]}"
806
807 case "${COMP_WORDS[0]},$COMP_CWORD" in
808 git-pull*,1)
b3391775 809 __gitcomp "$(__git_remotes)"
690d8824
JH
810 ;;
811 git,2)
b3391775 812 __gitcomp "$(__git_remotes)"
690d8824
JH
813 ;;
814 *)
815 local remote
816 case "${COMP_WORDS[0]}" in
817 git-pull) remote="${COMP_WORDS[1]}" ;;
818 git) remote="${COMP_WORDS[2]}" ;;
819 esac
b3391775 820 __gitcomp "$(__git_refs "$remote")"
690d8824
JH
821 ;;
822 esac
823}
824
825_git_push ()
826{
827 local cur="${COMP_WORDS[COMP_CWORD]}"
828
829 case "${COMP_WORDS[0]},$COMP_CWORD" in
830 git-push*,1)
b3391775 831 __gitcomp "$(__git_remotes)"
690d8824
JH
832 ;;
833 git,2)
b3391775 834 __gitcomp "$(__git_remotes)"
690d8824
JH
835 ;;
836 *)
837 case "$cur" in
838 *:*)
839 local remote
840 case "${COMP_WORDS[0]}" in
841 git-push) remote="${COMP_WORDS[1]}" ;;
842 git) remote="${COMP_WORDS[2]}" ;;
843 esac
b3391775 844 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
690d8824 845 ;;
161fea83
SP
846 +*)
847 __gitcomp "$(__git_refs)" + "${cur#+}"
848 ;;
690d8824 849 *)
92d7c8e3 850 __gitcomp "$(__git_refs)"
690d8824
JH
851 ;;
852 esac
853 ;;
854 esac
855}
856
61d926a3
SP
857_git_rebase ()
858{
51fe1209
SG
859 local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
860 if [ -d .dotest ] || [ -d "$dir"/.dotest-merge ]; then
b3391775 861 __gitcomp "--continue --skip --abort"
61d926a3
SP
862 return
863 fi
ce1e39d2
SP
864 case "${COMP_WORDS[COMP_CWORD-1]}" in
865 -s|--strategy)
b3391775 866 __gitcomp "$(__git_merge_strategies)"
ce1e39d2
SP
867 return
868 esac
61d926a3 869 case "$cur" in
ce1e39d2 870 --strategy=*)
b3391775 871 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
ce1e39d2
SP
872 return
873 ;;
61d926a3 874 --*)
d9e3b702 875 __gitcomp "--onto --merge --strategy --interactive"
61d926a3
SP
876 return
877 esac
b3391775 878 __gitcomp "$(__git_refs)"
61d926a3
SP
879}
880
e0d10e1c 881_git_config ()
5de40f59
SP
882{
883 local cur="${COMP_WORDS[COMP_CWORD]}"
884 local prv="${COMP_WORDS[COMP_CWORD-1]}"
885 case "$prv" in
886 branch.*.remote)
78d4d6a2 887 __gitcomp "$(__git_remotes)"
5de40f59
SP
888 return
889 ;;
890 branch.*.merge)
78d4d6a2 891 __gitcomp "$(__git_refs)"
5de40f59
SP
892 return
893 ;;
894 remote.*.fetch)
895 local remote="${prv#remote.}"
896 remote="${remote%.fetch}"
78d4d6a2 897 __gitcomp "$(__git_refs_remotes "$remote")"
5de40f59
SP
898 return
899 ;;
900 remote.*.push)
901 local remote="${prv#remote.}"
902 remote="${remote%.push}"
78d4d6a2 903 __gitcomp "$(git --git-dir="$(__gitdir)" \
5de40f59 904 for-each-ref --format='%(refname):%(refname)' \
78d4d6a2
SP
905 refs/heads)"
906 return
907 ;;
908 pull.twohead|pull.octopus)
909 __gitcomp "$(__git_merge_strategies)"
910 return
911 ;;
912 color.branch|color.diff|color.status)
913 __gitcomp "always never auto"
914 return
915 ;;
916 color.*.*)
917 __gitcomp "
918 black red green yellow blue magenta cyan white
919 bold dim ul blink reverse
920 "
5de40f59
SP
921 return
922 ;;
923 *.*)
924 COMPREPLY=()
925 return
926 ;;
927 esac
928 case "$cur" in
929 --*)
78d4d6a2 930 __gitcomp "
47e98eec 931 --global --system --file=
12977705 932 --list --replace-all
5de40f59 933 --get --get-all --get-regexp
1b71eb35 934 --add --unset --unset-all
12977705 935 --remove-section --rename-section
78d4d6a2 936 "
5de40f59
SP
937 return
938 ;;
939 branch.*.*)
940 local pfx="${cur%.*}."
941 cur="${cur##*.}"
78d4d6a2 942 __gitcomp "remote merge" "$pfx" "$cur"
5de40f59
SP
943 return
944 ;;
945 branch.*)
946 local pfx="${cur%.*}."
947 cur="${cur#*.}"
78d4d6a2 948 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
5de40f59
SP
949 return
950 ;;
951 remote.*.*)
952 local pfx="${cur%.*}."
953 cur="${cur##*.}"
12977705
SP
954 __gitcomp "
955 url fetch push skipDefaultUpdate
956 receivepack uploadpack tagopt
957 " "$pfx" "$cur"
5de40f59
SP
958 return
959 ;;
960 remote.*)
961 local pfx="${cur%.*}."
962 cur="${cur#*.}"
78d4d6a2 963 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
5de40f59
SP
964 return
965 ;;
966 esac
78d4d6a2 967 __gitcomp "
5de40f59
SP
968 apply.whitespace
969 core.fileMode
970 core.gitProxy
971 core.ignoreStat
972 core.preferSymlinkRefs
973 core.logAllRefUpdates
47e98eec 974 core.loosecompression
5de40f59
SP
975 core.repositoryFormatVersion
976 core.sharedRepository
977 core.warnAmbiguousRefs
978 core.compression
78d4d6a2
SP
979 core.packedGitWindowSize
980 core.packedGitLimit
2122591b 981 clean.requireForce
78d4d6a2
SP
982 color.branch
983 color.branch.current
984 color.branch.local
985 color.branch.remote
986 color.branch.plain
a159ca0c 987 color.diff
78d4d6a2
SP
988 color.diff.plain
989 color.diff.meta
990 color.diff.frag
991 color.diff.old
992 color.diff.new
993 color.diff.commit
994 color.diff.whitespace
a159ca0c 995 color.pager
a159ca0c 996 color.status
78d4d6a2
SP
997 color.status.header
998 color.status.added
999 color.status.changed
1000 color.status.untracked
1001 diff.renameLimit
1002 diff.renames
1003 fetch.unpackLimit
1004 format.headers
47e98eec 1005 format.subjectprefix
78d4d6a2
SP
1006 gitcvs.enabled
1007 gitcvs.logfile
12977705 1008 gitcvs.allbinary
6aeeffd1
JE
1009 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1010 gitcvs.dbtablenameprefix
12977705 1011 gc.packrefs
78d4d6a2
SP
1012 gc.reflogexpire
1013 gc.reflogexpireunreachable
1014 gc.rerereresolved
1015 gc.rerereunresolved
5de40f59
SP
1016 http.sslVerify
1017 http.sslCert
1018 http.sslKey
1019 http.sslCAInfo
1020 http.sslCAPath
1021 http.maxRequests
78d4d6a2
SP
1022 http.lowSpeedLimit
1023 http.lowSpeedTime
5de40f59 1024 http.noEPSV
78d4d6a2
SP
1025 i18n.commitEncoding
1026 i18n.logOutputEncoding
1027 log.showroot
12977705 1028 merge.tool
78d4d6a2
SP
1029 merge.summary
1030 merge.verbosity
5de40f59 1031 pack.window
12977705 1032 pack.depth
47e98eec
SP
1033 pack.windowMemory
1034 pack.compression
1035 pack.deltaCacheSize
1036 pack.deltaCacheLimit
78d4d6a2
SP
1037 pull.octopus
1038 pull.twohead
5de40f59 1039 repack.useDeltaBaseOffset
78d4d6a2
SP
1040 show.difftree
1041 showbranch.default
1042 tar.umask
1043 transfer.unpackLimit
5de40f59
SP
1044 receive.unpackLimit
1045 receive.denyNonFastForwards
78d4d6a2
SP
1046 user.name
1047 user.email
1048 user.signingkey
1049 whatchanged.difftree
5de40f59 1050 branch. remote.
78d4d6a2 1051 "
5de40f59
SP
1052}
1053
88293c67
SP
1054_git_remote ()
1055{
3ff1320d
SG
1056 local subcommands="add rm show prune update"
1057 local subcommand="$(__git_find_subcommand "$subcommands")"
1058 if [ -z "$subcommand" ]; then
3903c618 1059 __gitcomp "$subcommands"
88293c67
SP
1060 return
1061 fi
1062
3ff1320d 1063 case "$subcommand" in
a3b811a4 1064 rm|show|prune)
88293c67
SP
1065 __gitcomp "$(__git_remotes)"
1066 ;;
fb72759b
SP
1067 update)
1068 local i c='' IFS=$'\n'
1069 for i in $(git --git-dir="$(__gitdir)" config --list); do
1070 case "$i" in
1071 remotes.*)
1072 i="${i#remotes.}"
1073 c="$c ${i/=*/}"
1074 ;;
1075 esac
1076 done
1077 __gitcomp "$c"
1078 ;;
88293c67
SP
1079 *)
1080 COMPREPLY=()
1081 ;;
1082 esac
1083}
1084
67e78c3b
SP
1085_git_reset ()
1086{
1087 local cur="${COMP_WORDS[COMP_CWORD]}"
b3391775
SP
1088 case "$cur" in
1089 --*)
1090 __gitcomp "--mixed --hard --soft"
1091 return
1092 ;;
1093 esac
1094 __gitcomp "$(__git_refs)"
67e78c3b
SP
1095}
1096
1fd6bec9
SP
1097_git_shortlog ()
1098{
1099 local cur="${COMP_WORDS[COMP_CWORD]}"
1100 case "$cur" in
1101 --*)
1102 __gitcomp "
1103 --max-count= --max-age= --since= --after=
1104 --min-age= --before= --until=
1105 --no-merges
1106 --author= --committer= --grep=
1107 --all-match
1108 --not --all
1109 --numbered --summary
1110 "
1111 return
1112 ;;
1113 esac
1114 __git_complete_revlist
1115}
1116
90131924
SP
1117_git_show ()
1118{
1119 local cur="${COMP_WORDS[COMP_CWORD]}"
1120 case "$cur" in
1121 --pretty=*)
b3391775 1122 __gitcomp "
90131924 1123 oneline short medium full fuller email raw
b3391775 1124 " "" "${cur##--pretty=}"
90131924
SP
1125 return
1126 ;;
1127 --*)
b3391775 1128 __gitcomp "--pretty="
90131924
SP
1129 return
1130 ;;
1131 esac
1132 __git_complete_file
1133}
1134
7fd53fce
JH
1135_git_stash ()
1136{
88b302f5 1137 local subcommands='save list show apply clear drop pop create'
3ff1320d
SG
1138 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1139 __gitcomp "$subcommands"
1140 fi
7fd53fce
JH
1141}
1142
be86f7a0
SP
1143_git_submodule ()
1144{
3ff1320d
SG
1145 local subcommands="add status init update"
1146 if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
be86f7a0
SP
1147 local cur="${COMP_WORDS[COMP_CWORD]}"
1148 case "$cur" in
1149 --*)
1150 __gitcomp "--quiet --cached"
1151 ;;
1152 *)
3ff1320d 1153 __gitcomp "$subcommands"
be86f7a0
SP
1154 ;;
1155 esac
1156 return
1157 fi
1158}
1159
47f6ee28
SG
1160_git_svn ()
1161{
1162 local subcommands="
1163 init fetch clone rebase dcommit log find-rev
1164 set-tree commit-diff info create-ignore propget
1165 proplist show-ignore show-externals
1166 "
1167 local subcommand="$(__git_find_subcommand "$subcommands")"
1168 if [ -z "$subcommand" ]; then
1169 __gitcomp "$subcommands"
1170 else
1171 local remote_opts="--username= --config-dir= --no-auth-cache"
1172 local fc_opts="
1173 --follow-parent --authors-file= --repack=
1174 --no-metadata --use-svm-props --use-svnsync-props
1175 --log-window-size= --no-checkout --quiet
1176 --repack-flags --user-log-author $remote_opts
1177 "
1178 local init_opts="
1179 --template= --shared= --trunk= --tags=
1180 --branches= --stdlayout --minimize-url
1181 --no-metadata --use-svm-props --use-svnsync-props
1182 --rewrite-root= $remote_opts
1183 "
1184 local cmt_opts="
1185 --edit --rmdir --find-copies-harder --copy-similarity=
1186 "
1187
1188 local cur="${COMP_WORDS[COMP_CWORD]}"
1189 case "$subcommand,$cur" in
1190 fetch,--*)
1191 __gitcomp "--revision= --fetch-all $fc_opts"
1192 ;;
1193 clone,--*)
1194 __gitcomp "--revision= $fc_opts $init_opts"
1195 ;;
1196 init,--*)
1197 __gitcomp "$init_opts"
1198 ;;
1199 dcommit,--*)
1200 __gitcomp "
1201 --merge --strategy= --verbose --dry-run
1202 --fetch-all --no-rebase $cmt_opts $fc_opts
1203 "
1204 ;;
1205 set-tree,--*)
1206 __gitcomp "--stdin $cmt_opts $fc_opts"
1207 ;;
1208 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1209 show-externals,--*)
1210 __gitcomp "--revision="
1211 ;;
1212 log,--*)
1213 __gitcomp "
1214 --limit= --revision= --verbose --incremental
1215 --oneline --show-commit --non-recursive
1216 --authors-file=
1217 "
1218 ;;
1219 rebase,--*)
1220 __gitcomp "
1221 --merge --verbose --strategy= --local
1222 --fetch-all $fc_opts
1223 "
1224 ;;
1225 commit-diff,--*)
1226 __gitcomp "--message= --file= --revision= $cmt_opts"
1227 ;;
1228 info,--*)
1229 __gitcomp "--url"
1230 ;;
1231 *)
1232 COMPREPLY=()
1233 ;;
1234 esac
1235 fi
1236}
1237
88e21dc7
SP
1238_git_tag ()
1239{
1240 local i c=1 f=0
1241 while [ $c -lt $COMP_CWORD ]; do
1242 i="${COMP_WORDS[c]}"
1243 case "$i" in
1244 -d|-v)
1245 __gitcomp "$(__git_tags)"
1246 return
1247 ;;
1248 -f)
1249 f=1
1250 ;;
1251 esac
1252 c=$((++c))
1253 done
1254
1255 case "${COMP_WORDS[COMP_CWORD-1]}" in
1256 -m|-F)
1257 COMPREPLY=()
1258 ;;
1259 -*|tag|git-tag)
1260 if [ $f = 1 ]; then
1261 __gitcomp "$(__git_tags)"
1262 else
1263 COMPREPLY=()
1264 fi
1265 ;;
1266 *)
1267 __gitcomp "$(__git_refs)"
1268 ;;
1269 esac
1270}
1271
690d8824
JH
1272_git ()
1273{
873537fa
SP
1274 local i c=1 command __git_dir
1275
1276 while [ $c -lt $COMP_CWORD ]; do
1277 i="${COMP_WORDS[c]}"
1278 case "$i" in
1279 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1280 --bare) __git_dir="." ;;
1281 --version|--help|-p|--paginate) ;;
1282 *) command="$i"; break ;;
1283 esac
1284 c=$((++c))
1285 done
1286
1d17b22e 1287 if [ -z "$command" ]; then
72e5e989
SP
1288 case "${COMP_WORDS[COMP_CWORD]}" in
1289 --*=*) COMPREPLY=() ;;
47e98eec 1290 --*) __gitcomp "
ce5a2c95 1291 --paginate
47e98eec
SP
1292 --no-pager
1293 --git-dir=
1294 --bare
1295 --version
1296 --exec-path
ce5a2c95
TL
1297 --work-tree=
1298 --help
47e98eec
SP
1299 "
1300 ;;
72e5e989
SP
1301 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1302 esac
1303 return
873537fa 1304 fi
367dce2a 1305
873537fa
SP
1306 local expansion=$(__git_aliased_command "$command")
1307 [ "$expansion" ] && command="$expansion"
367dce2a 1308
873537fa 1309 case "$command" in
88329195 1310 am) _git_am ;;
8435b548 1311 add) _git_add ;;
88329195 1312 apply) _git_apply ;;
b2e69f62 1313 bisect) _git_bisect ;;
374a58c9 1314 bundle) _git_bundle ;;
873537fa 1315 branch) _git_branch ;;
873537fa 1316 checkout) _git_checkout ;;
d8a9fea5 1317 cherry) _git_cherry ;;
1273231e 1318 cherry-pick) _git_cherry_pick ;;
4548e855 1319 commit) _git_commit ;;
e0d10e1c 1320 config) _git_config ;;
217926c0 1321 describe) _git_describe ;;
873537fa 1322 diff) _git_diff ;;
873537fa 1323 fetch) _git_fetch ;;
f53352fb 1324 format-patch) _git_format_patch ;;
b26c8748 1325 gc) _git_gc ;;
873537fa
SP
1326 log) _git_log ;;
1327 ls-remote) _git_ls_remote ;;
1328 ls-tree) _git_ls_tree ;;
4ad91321 1329 merge) _git_merge;;
873537fa 1330 merge-base) _git_merge_base ;;
d33909bf 1331 name-rev) _git_name_rev ;;
873537fa
SP
1332 pull) _git_pull ;;
1333 push) _git_push ;;
61d926a3 1334 rebase) _git_rebase ;;
88293c67 1335 remote) _git_remote ;;
873537fa 1336 reset) _git_reset ;;
1fd6bec9 1337 shortlog) _git_shortlog ;;
90131924 1338 show) _git_show ;;
873537fa 1339 show-branch) _git_log ;;
7fd53fce 1340 stash) _git_stash ;;
be86f7a0 1341 submodule) _git_submodule ;;
47f6ee28 1342 svn) _git_svn ;;
88e21dc7 1343 tag) _git_tag ;;
873537fa
SP
1344 whatchanged) _git_log ;;
1345 *) COMPREPLY=() ;;
1346 esac
690d8824
JH
1347}
1348
1349_gitk ()
1350{
1351 local cur="${COMP_WORDS[COMP_CWORD]}"
07ba53f7
RQ
1352 local g="$(git rev-parse --git-dir 2>/dev/null)"
1353 local merge=""
1354 if [ -f $g/MERGE_HEAD ]; then
1355 merge="--merge"
1356 fi
b3391775
SP
1357 case "$cur" in
1358 --*)
07ba53f7 1359 __gitcomp "--not --all $merge"
b3391775
SP
1360 return
1361 ;;
1362 esac
ec804891 1363 __git_complete_revlist
690d8824
JH
1364}
1365
1366complete -o default -o nospace -F _git git
b3391775
SP
1367complete -o default -o nospace -F _gitk gitk
1368complete -o default -o nospace -F _git_am git-am
1369complete -o default -o nospace -F _git_apply git-apply
b2e69f62 1370complete -o default -o nospace -F _git_bisect git-bisect
b3391775 1371complete -o default -o nospace -F _git_branch git-branch
374a58c9 1372complete -o default -o nospace -F _git_bundle git-bundle
b3391775 1373complete -o default -o nospace -F _git_checkout git-checkout
d8a9fea5 1374complete -o default -o nospace -F _git_cherry git-cherry
b3391775
SP
1375complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1376complete -o default -o nospace -F _git_commit git-commit
217926c0 1377complete -o default -o nospace -F _git_describe git-describe
690d8824 1378complete -o default -o nospace -F _git_diff git-diff
690d8824 1379complete -o default -o nospace -F _git_fetch git-fetch
f53352fb 1380complete -o default -o nospace -F _git_format_patch git-format-patch
b26c8748 1381complete -o default -o nospace -F _git_gc git-gc
690d8824 1382complete -o default -o nospace -F _git_log git-log
b3391775 1383complete -o default -o nospace -F _git_ls_remote git-ls-remote
690d8824 1384complete -o default -o nospace -F _git_ls_tree git-ls-tree
b3391775
SP
1385complete -o default -o nospace -F _git_merge git-merge
1386complete -o default -o nospace -F _git_merge_base git-merge-base
1387complete -o default -o nospace -F _git_name_rev git-name-rev
690d8824
JH
1388complete -o default -o nospace -F _git_pull git-pull
1389complete -o default -o nospace -F _git_push git-push
b3391775
SP
1390complete -o default -o nospace -F _git_rebase git-rebase
1391complete -o default -o nospace -F _git_config git-config
88293c67 1392complete -o default -o nospace -F _git_remote git-remote
b3391775 1393complete -o default -o nospace -F _git_reset git-reset
1fd6bec9 1394complete -o default -o nospace -F _git_shortlog git-shortlog
90131924 1395complete -o default -o nospace -F _git_show git-show
7fd53fce 1396complete -o default -o nospace -F _git_stash git-stash
be86f7a0 1397complete -o default -o nospace -F _git_submodule git-submodule
47f6ee28 1398complete -o default -o nospace -F _git_svn git-svn
144d33de 1399complete -o default -o nospace -F _git_log git-show-branch
88e21dc7 1400complete -o default -o nospace -F _git_tag git-tag
690d8824
JH
1401complete -o default -o nospace -F _git_log git-whatchanged
1402
1403# The following are necessary only for Cygwin, and only are needed
1404# when the user has tab-completed the executable name and consequently
1405# included the '.exe' suffix.
1406#
76c3eb51 1407if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
b3391775
SP
1408complete -o default -o nospace -F _git_add git-add.exe
1409complete -o default -o nospace -F _git_apply git-apply.exe
144d33de 1410complete -o default -o nospace -F _git git.exe
b3391775 1411complete -o default -o nospace -F _git_branch git-branch.exe
374a58c9 1412complete -o default -o nospace -F _git_bundle git-bundle.exe
d8a9fea5 1413complete -o default -o nospace -F _git_cherry git-cherry.exe
217926c0 1414complete -o default -o nospace -F _git_describe git-describe.exe
690d8824 1415complete -o default -o nospace -F _git_diff git-diff.exe
f53352fb 1416complete -o default -o nospace -F _git_format_patch git-format-patch.exe
690d8824
JH
1417complete -o default -o nospace -F _git_log git-log.exe
1418complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
b3391775
SP
1419complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1420complete -o default -o nospace -F _git_name_rev git-name-rev.exe
690d8824 1421complete -o default -o nospace -F _git_push git-push.exe
b3391775 1422complete -o default -o nospace -F _git_config git-config
1fd6bec9 1423complete -o default -o nospace -F _git_shortlog git-shortlog.exe
90131924 1424complete -o default -o nospace -F _git_show git-show.exe
144d33de 1425complete -o default -o nospace -F _git_log git-show-branch.exe
88e21dc7 1426complete -o default -o nospace -F _git_tag git-tag.exe
690d8824 1427complete -o default -o nospace -F _git_log git-whatchanged.exe
76c3eb51 1428fi