Code

bash completion: Add completion for 'git mergetool'
[git.git] / contrib / completion / git-completion.bash
1 #
2 # bash completion support for core Git.
3 #
4 # Copyright (C) 2006,2007 Shawn O. Pearce <spearce@spearce.org>
5 # Conceptually based on gitcompletion (http://gitweb.hawaga.org.uk/).
6 # Distributed under the GNU General Public License, version 2.0.
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
15 #    *) common --long-options
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 #
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:
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 #
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 #
48 case "$COMP_WORDBREAKS" in
49 *:*) : great ;;
50 *)   COMP_WORDBREAKS="$COMP_WORDBREAKS:"
51 esac
53 __gitdir ()
54 {
55         if [ -z "$1" ]; then
56                 if [ -n "$__git_dir" ]; then
57                         echo "$__git_dir"
58                 elif [ -d .git ]; then
59                         echo .git
60                 else
61                         git rev-parse --git-dir 2>/dev/null
62                 fi
63         elif [ -d "$1/.git" ]; then
64                 echo "$1/.git"
65         else
66                 echo "$1"
67         fi
68 }
70 __git_ps1 ()
71 {
72         local g="$(git rev-parse --git-dir 2>/dev/null)"
73         if [ -n "$g" ]; then
74                 local r
75                 local b
76                 if [ -d "$g/rebase-apply" ]
77                 then
78                         if test -f "$g/rebase-apply/rebasing"
79                         then
80                                 r="|REBASE"
81                         elif test -f "$g/rebase-apply/applying"
82                         then
83                                 r="|AM"
84                         else
85                                 r="|AM/REBASE"
86                         fi
87                         b="$(git symbolic-ref HEAD 2>/dev/null)"
88                 elif [ -f "$g/rebase-merge/interactive" ]
89                 then
90                         r="|REBASE-i"
91                         b="$(cat "$g/rebase-merge/head-name")"
92                 elif [ -d "$g/rebase-merge" ]
93                 then
94                         r="|REBASE-m"
95                         b="$(cat "$g/rebase-merge/head-name")"
96                 elif [ -f "$g/MERGE_HEAD" ]
97                 then
98                         r="|MERGING"
99                         b="$(git symbolic-ref HEAD 2>/dev/null)"
100                 else
101                         if [ -f "$g/BISECT_LOG" ]
102                         then
103                                 r="|BISECTING"
104                         fi
105                         if ! b="$(git symbolic-ref HEAD 2>/dev/null)"
106                         then
107                                 if ! b="$(git describe --exact-match HEAD 2>/dev/null)"
108                                 then
109                                         b="$(cut -c1-7 "$g/HEAD")..."
110                                 fi
111                         fi
112                 fi
114                 if [ -n "$1" ]; then
115                         printf "$1" "${b##refs/heads/}$r"
116                 else
117                         printf " (%s)" "${b##refs/heads/}$r"
118                 fi
119         fi
122 __gitcomp_1 ()
124         local c IFS=' '$'\t'$'\n'
125         for c in $1; do
126                 case "$c$2" in
127                 --*=*) printf %s$'\n' "$c$2" ;;
128                 *.)    printf %s$'\n' "$c$2" ;;
129                 *)     printf %s$'\n' "$c$2 " ;;
130                 esac
131         done
134 __gitcomp ()
136         local cur="${COMP_WORDS[COMP_CWORD]}"
137         if [ $# -gt 2 ]; then
138                 cur="$3"
139         fi
140         case "$cur" in
141         --*=)
142                 COMPREPLY=()
143                 ;;
144         *)
145                 local IFS=$'\n'
146                 COMPREPLY=($(compgen -P "$2" \
147                         -W "$(__gitcomp_1 "$1" "$4")" \
148                         -- "$cur"))
149                 ;;
150         esac
153 __git_heads ()
155         local cmd i is_hash=y dir="$(__gitdir "$1")"
156         if [ -d "$dir" ]; then
157                 for i in $(git --git-dir="$dir" \
158                         for-each-ref --format='%(refname)' \
159                         refs/heads ); do
160                         echo "${i#refs/heads/}"
161                 done
162                 return
163         fi
164         for i in $(git ls-remote "$1" 2>/dev/null); do
165                 case "$is_hash,$i" in
166                 y,*) is_hash=n ;;
167                 n,*^{}) is_hash=y ;;
168                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
169                 n,*) is_hash=y; echo "$i" ;;
170                 esac
171         done
174 __git_tags ()
176         local cmd i is_hash=y dir="$(__gitdir "$1")"
177         if [ -d "$dir" ]; then
178                 for i in $(git --git-dir="$dir" \
179                         for-each-ref --format='%(refname)' \
180                         refs/tags ); do
181                         echo "${i#refs/tags/}"
182                 done
183                 return
184         fi
185         for i in $(git ls-remote "$1" 2>/dev/null); do
186                 case "$is_hash,$i" in
187                 y,*) is_hash=n ;;
188                 n,*^{}) is_hash=y ;;
189                 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
190                 n,*) is_hash=y; echo "$i" ;;
191                 esac
192         done
195 __git_refs ()
197         local cmd i is_hash=y dir="$(__gitdir "$1")"
198         if [ -d "$dir" ]; then
199                 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
200                 for i in $(git --git-dir="$dir" \
201                         for-each-ref --format='%(refname)' \
202                         refs/tags refs/heads refs/remotes); do
203                         case "$i" in
204                                 refs/tags/*)    echo "${i#refs/tags/}" ;;
205                                 refs/heads/*)   echo "${i#refs/heads/}" ;;
206                                 refs/remotes/*) echo "${i#refs/remotes/}" ;;
207                                 *)              echo "$i" ;;
208                         esac
209                 done
210                 return
211         fi
212         for i in $(git ls-remote "$dir" 2>/dev/null); do
213                 case "$is_hash,$i" in
214                 y,*) is_hash=n ;;
215                 n,*^{}) is_hash=y ;;
216                 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
217                 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
218                 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
219                 n,*) is_hash=y; echo "$i" ;;
220                 esac
221         done
224 __git_refs2 ()
226         local i
227         for i in $(__git_refs "$1"); do
228                 echo "$i:$i"
229         done
232 __git_refs_remotes ()
234         local cmd i is_hash=y
235         for i in $(git ls-remote "$1" 2>/dev/null); do
236                 case "$is_hash,$i" in
237                 n,refs/heads/*)
238                         is_hash=y
239                         echo "$i:refs/remotes/$1/${i#refs/heads/}"
240                         ;;
241                 y,*) is_hash=n ;;
242                 n,*^{}) is_hash=y ;;
243                 n,refs/tags/*) is_hash=y;;
244                 n,*) is_hash=y; ;;
245                 esac
246         done
249 __git_remotes ()
251         local i ngoff IFS=$'\n' d="$(__gitdir)"
252         shopt -q nullglob || ngoff=1
253         shopt -s nullglob
254         for i in "$d/remotes"/*; do
255                 echo ${i#$d/remotes/}
256         done
257         [ "$ngoff" ] && shopt -u nullglob
258         for i in $(git --git-dir="$d" config --list); do
259                 case "$i" in
260                 remote.*.url=*)
261                         i="${i#remote.}"
262                         echo "${i/.url=*/}"
263                         ;;
264                 esac
265         done
268 __git_merge_strategies ()
270         if [ -n "$__git_merge_strategylist" ]; then
271                 echo "$__git_merge_strategylist"
272                 return
273         fi
274         sed -n "/^all_strategies='/{
275                 s/^all_strategies='//
276                 s/'//
277                 p
278                 q
279                 }" "$(git --exec-path)/git-merge"
281 __git_merge_strategylist=
282 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
284 __git_complete_file ()
286         local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
287         case "$cur" in
288         ?*:*)
289                 ref="${cur%%:*}"
290                 cur="${cur#*:}"
291                 case "$cur" in
292                 ?*/*)
293                         pfx="${cur%/*}"
294                         cur="${cur##*/}"
295                         ls="$ref:$pfx"
296                         pfx="$pfx/"
297                         ;;
298                 *)
299                         ls="$ref"
300                         ;;
301             esac
303                 case "$COMP_WORDBREAKS" in
304                 *:*) : great ;;
305                 *)   pfx="$ref:$pfx" ;;
306                 esac
308                 local IFS=$'\n'
309                 COMPREPLY=($(compgen -P "$pfx" \
310                         -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
311                                 | sed '/^100... blob /{
312                                            s,^.*        ,,
313                                            s,$, ,
314                                        }
315                                        /^120000 blob /{
316                                            s,^.*        ,,
317                                            s,$, ,
318                                        }
319                                        /^040000 tree /{
320                                            s,^.*        ,,
321                                            s,$,/,
322                                        }
323                                        s/^.*    //')" \
324                         -- "$cur"))
325                 ;;
326         *)
327                 __gitcomp "$(__git_refs)"
328                 ;;
329         esac
332 __git_complete_revlist ()
334         local pfx cur="${COMP_WORDS[COMP_CWORD]}"
335         case "$cur" in
336         *...*)
337                 pfx="${cur%...*}..."
338                 cur="${cur#*...}"
339                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
340                 ;;
341         *..*)
342                 pfx="${cur%..*}.."
343                 cur="${cur#*..}"
344                 __gitcomp "$(__git_refs)" "$pfx" "$cur"
345                 ;;
346         *)
347                 __gitcomp "$(__git_refs)"
348                 ;;
349         esac
352 __git_all_commands ()
354         if [ -n "$__git_all_commandlist" ]; then
355                 echo "$__git_all_commandlist"
356                 return
357         fi
358         local i IFS=" "$'\n'
359         for i in $(git help -a|egrep '^ ')
360         do
361                 case $i in
362                 *--*)             : helper pattern;;
363                 *) echo $i;;
364                 esac
365         done
367 __git_all_commandlist=
368 __git_all_commandlist="$(__git_all_commands 2>/dev/null)"
370 __git_porcelain_commands ()
372         if [ -n "$__git_porcelain_commandlist" ]; then
373                 echo "$__git_porcelain_commandlist"
374                 return
375         fi
376         local i IFS=" "$'\n'
377         for i in "help" $(__git_all_commands)
378         do
379                 case $i in
380                 *--*)             : helper pattern;;
381                 applymbox)        : ask gittus;;
382                 applypatch)       : ask gittus;;
383                 archimport)       : import;;
384                 cat-file)         : plumbing;;
385                 check-attr)       : plumbing;;
386                 check-ref-format) : plumbing;;
387                 commit-tree)      : plumbing;;
388                 cvsexportcommit)  : export;;
389                 cvsimport)        : import;;
390                 cvsserver)        : daemon;;
391                 daemon)           : daemon;;
392                 diff-files)       : plumbing;;
393                 diff-index)       : plumbing;;
394                 diff-tree)        : plumbing;;
395                 fast-import)      : import;;
396                 fsck-objects)     : plumbing;;
397                 fetch-pack)       : plumbing;;
398                 fmt-merge-msg)    : plumbing;;
399                 for-each-ref)     : plumbing;;
400                 hash-object)      : plumbing;;
401                 http-*)           : transport;;
402                 index-pack)       : plumbing;;
403                 init-db)          : deprecated;;
404                 local-fetch)      : plumbing;;
405                 mailinfo)         : plumbing;;
406                 mailsplit)        : plumbing;;
407                 merge-*)          : plumbing;;
408                 mktree)           : plumbing;;
409                 mktag)            : plumbing;;
410                 pack-objects)     : plumbing;;
411                 pack-redundant)   : plumbing;;
412                 pack-refs)        : plumbing;;
413                 parse-remote)     : plumbing;;
414                 patch-id)         : plumbing;;
415                 peek-remote)      : plumbing;;
416                 prune)            : plumbing;;
417                 prune-packed)     : plumbing;;
418                 quiltimport)      : import;;
419                 read-tree)        : plumbing;;
420                 receive-pack)     : plumbing;;
421                 reflog)           : plumbing;;
422                 repo-config)      : deprecated;;
423                 rerere)           : plumbing;;
424                 rev-list)         : plumbing;;
425                 rev-parse)        : plumbing;;
426                 runstatus)        : plumbing;;
427                 sh-setup)         : internal;;
428                 shell)            : daemon;;
429                 send-pack)        : plumbing;;
430                 show-index)       : plumbing;;
431                 ssh-*)            : transport;;
432                 stripspace)       : plumbing;;
433                 symbolic-ref)     : plumbing;;
434                 tar-tree)         : deprecated;;
435                 unpack-file)      : plumbing;;
436                 unpack-objects)   : plumbing;;
437                 update-index)     : plumbing;;
438                 update-ref)       : plumbing;;
439                 update-server-info) : daemon;;
440                 upload-archive)   : plumbing;;
441                 upload-pack)      : plumbing;;
442                 write-tree)       : plumbing;;
443                 verify-tag)       : plumbing;;
444                 *) echo $i;;
445                 esac
446         done
448 __git_porcelain_commandlist=
449 __git_porcelain_commandlist="$(__git_porcelain_commands 2>/dev/null)"
451 __git_aliases ()
453         local i IFS=$'\n'
454         for i in $(git --git-dir="$(__gitdir)" config --list); do
455                 case "$i" in
456                 alias.*)
457                         i="${i#alias.}"
458                         echo "${i/=*/}"
459                         ;;
460                 esac
461         done
464 __git_aliased_command ()
466         local word cmdline=$(git --git-dir="$(__gitdir)" \
467                 config --get "alias.$1")
468         for word in $cmdline; do
469                 if [ "${word##-*}" ]; then
470                         echo $word
471                         return
472                 fi
473         done
476 __git_find_subcommand ()
478         local word subcommand c=1
480         while [ $c -lt $COMP_CWORD ]; do
481                 word="${COMP_WORDS[c]}"
482                 for subcommand in $1; do
483                         if [ "$subcommand" = "$word" ]; then
484                                 echo "$subcommand"
485                                 return
486                         fi
487                 done
488                 c=$((++c))
489         done
492 __git_has_doubledash ()
494         local c=1
495         while [ $c -lt $COMP_CWORD ]; do
496                 if [ "--" = "${COMP_WORDS[c]}" ]; then
497                         return 0
498                 fi
499                 c=$((++c))
500         done
501         return 1
504 __git_whitespacelist="nowarn warn error error-all fix"
506 _git_am ()
508         local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
509         if [ -d "$dir"/rebase-apply ]; then
510                 __gitcomp "--skip --resolved --abort"
511                 return
512         fi
513         case "$cur" in
514         --whitespace=*)
515                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
516                 return
517                 ;;
518         --*)
519                 __gitcomp "
520                         --signoff --utf8 --binary --3way --interactive
521                         --whitespace=
522                         "
523                 return
524         esac
525         COMPREPLY=()
528 _git_apply ()
530         local cur="${COMP_WORDS[COMP_CWORD]}"
531         case "$cur" in
532         --whitespace=*)
533                 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
534                 return
535                 ;;
536         --*)
537                 __gitcomp "
538                         --stat --numstat --summary --check --index
539                         --cached --index-info --reverse --reject --unidiff-zero
540                         --apply --no-add --exclude=
541                         --whitespace= --inaccurate-eof --verbose
542                         "
543                 return
544         esac
545         COMPREPLY=()
548 _git_add ()
550         __git_has_doubledash && return
552         local cur="${COMP_WORDS[COMP_CWORD]}"
553         case "$cur" in
554         --*)
555                 __gitcomp "
556                         --interactive --refresh --patch --update --dry-run
557                         --ignore-errors
558                         "
559                 return
560         esac
561         COMPREPLY=()
564 _git_archive ()
566         local cur="${COMP_WORDS[COMP_CWORD]}"
567         case "$cur" in
568         --format=*)
569                 __gitcomp "$(git archive --list)" "" "${cur##--format=}"
570                 return
571                 ;;
572         --remote=*)
573                 __gitcomp "$(__git_remotes)" "" "${cur##--remote=}"
574                 return
575                 ;;
576         --*)
577                 __gitcomp "
578                         --format= --list --verbose
579                         --prefix= --remote= --exec=
580                         "
581                 return
582                 ;;
583         esac
584         __git_complete_file
587 _git_bisect ()
589         __git_has_doubledash && return
591         local subcommands="start bad good skip reset visualize replay log run"
592         local subcommand="$(__git_find_subcommand "$subcommands")"
593         if [ -z "$subcommand" ]; then
594                 __gitcomp "$subcommands"
595                 return
596         fi
598         case "$subcommand" in
599         bad|good|reset|skip)
600                 __gitcomp "$(__git_refs)"
601                 ;;
602         *)
603                 COMPREPLY=()
604                 ;;
605         esac
608 _git_branch ()
610         local i c=1 only_local_ref="n" has_r="n"
612         while [ $c -lt $COMP_CWORD ]; do
613                 i="${COMP_WORDS[c]}"
614                 case "$i" in
615                 -d|-m)  only_local_ref="y" ;;
616                 -r)     has_r="y" ;;
617                 esac
618                 c=$((++c))
619         done
621         case "${COMP_WORDS[COMP_CWORD]}" in
622         --*=*)  COMPREPLY=() ;;
623         --*)
624                 __gitcomp "
625                         --color --no-color --verbose --abbrev= --no-abbrev
626                         --track --no-track --contains --merged --no-merged
627                         "
628                 ;;
629         *)
630                 if [ $only_local_ref = "y" -a $has_r = "n" ]; then
631                         __gitcomp "$(__git_heads)"
632                 else
633                         __gitcomp "$(__git_refs)"
634                 fi
635                 ;;
636         esac
639 _git_bundle ()
641         local mycword="$COMP_CWORD"
642         case "${COMP_WORDS[0]}" in
643         git)
644                 local cmd="${COMP_WORDS[2]}"
645                 mycword="$((mycword-1))"
646                 ;;
647         git-bundle*)
648                 local cmd="${COMP_WORDS[1]}"
649                 ;;
650         esac
651         case "$mycword" in
652         1)
653                 __gitcomp "create list-heads verify unbundle"
654                 ;;
655         2)
656                 # looking for a file
657                 ;;
658         *)
659                 case "$cmd" in
660                         create)
661                                 __git_complete_revlist
662                         ;;
663                 esac
664                 ;;
665         esac
668 _git_checkout ()
670         __git_has_doubledash && return
672         __gitcomp "$(__git_refs)"
675 _git_cherry ()
677         __gitcomp "$(__git_refs)"
680 _git_cherry_pick ()
682         local cur="${COMP_WORDS[COMP_CWORD]}"
683         case "$cur" in
684         --*)
685                 __gitcomp "--edit --no-commit"
686                 ;;
687         *)
688                 __gitcomp "$(__git_refs)"
689                 ;;
690         esac
693 _git_clean ()
695         __git_has_doubledash && return
697         local cur="${COMP_WORDS[COMP_CWORD]}"
698         case "$cur" in
699         --*)
700                 __gitcomp "--dry-run --quiet"
701                 return
702                 ;;
703         esac
704         COMPREPLY=()
707 _git_clone ()
709         local cur="${COMP_WORDS[COMP_CWORD]}"
710         case "$cur" in
711         --*)
712                 __gitcomp "
713                         --local
714                         --no-hardlinks
715                         --shared
716                         --reference
717                         --quiet
718                         --no-checkout
719                         --bare
720                         --mirror
721                         --origin
722                         --upload-pack
723                         --template=
724                         --depth
725                         "
726                 return
727                 ;;
728         esac
729         COMPREPLY=()
732 _git_commit ()
734         __git_has_doubledash && return
736         local cur="${COMP_WORDS[COMP_CWORD]}"
737         case "$cur" in
738         --*)
739                 __gitcomp "
740                         --all --author= --signoff --verify --no-verify
741                         --edit --amend --include --only
742                         "
743                 return
744         esac
745         COMPREPLY=()
748 _git_describe ()
750         local cur="${COMP_WORDS[COMP_CWORD]}"
751         case "$cur" in
752         --*)
753                 __gitcomp "
754                         --all --tags --contains --abbrev= --candidates=
755                         --exact-match --debug --long --match --always
756                         "
757                 return
758         esac
759         __gitcomp "$(__git_refs)"
762 _git_diff ()
764         __git_has_doubledash && return
766         local cur="${COMP_WORDS[COMP_CWORD]}"
767         case "$cur" in
768         --*)
769                 __gitcomp "--cached --stat --numstat --shortstat --summary
770                         --patch-with-stat --name-only --name-status --color
771                         --no-color --color-words --no-renames --check
772                         --full-index --binary --abbrev --diff-filter
773                         --find-copies-harder --pickaxe-all --pickaxe-regex
774                         --text --ignore-space-at-eol --ignore-space-change
775                         --ignore-all-space --exit-code --quiet --ext-diff
776                         --no-ext-diff
777                         --no-prefix --src-prefix= --dst-prefix=
778                         --base --ours --theirs
779                         "
780                 return
781                 ;;
782         esac
783         __git_complete_file
786 _git_fetch ()
788         local cur="${COMP_WORDS[COMP_CWORD]}"
790         case "${COMP_WORDS[0]},$COMP_CWORD" in
791         git-fetch*,1)
792                 __gitcomp "$(__git_remotes)"
793                 ;;
794         git,2)
795                 __gitcomp "$(__git_remotes)"
796                 ;;
797         *)
798                 case "$cur" in
799                 *:*)
800                         local pfx=""
801                         case "$COMP_WORDBREAKS" in
802                         *:*) : great ;;
803                         *)   pfx="${cur%%:*}:" ;;
804                         esac
805                         __gitcomp "$(__git_refs)" "$pfx" "${cur#*:}"
806                         ;;
807                 *)
808                         local remote
809                         case "${COMP_WORDS[0]}" in
810                         git-fetch) remote="${COMP_WORDS[1]}" ;;
811                         git)       remote="${COMP_WORDS[2]}" ;;
812                         esac
813                         __gitcomp "$(__git_refs2 "$remote")"
814                         ;;
815                 esac
816                 ;;
817         esac
820 _git_format_patch ()
822         local cur="${COMP_WORDS[COMP_CWORD]}"
823         case "$cur" in
824         --*)
825                 __gitcomp "
826                         --stdout --attach --thread
827                         --output-directory
828                         --numbered --start-number
829                         --numbered-files
830                         --keep-subject
831                         --signoff
832                         --in-reply-to=
833                         --full-index --binary
834                         --not --all
835                         --cover-letter
836                         --no-prefix --src-prefix= --dst-prefix=
837                         "
838                 return
839                 ;;
840         esac
841         __git_complete_revlist
844 _git_gc ()
846         local cur="${COMP_WORDS[COMP_CWORD]}"
847         case "$cur" in
848         --*)
849                 __gitcomp "--prune --aggressive"
850                 return
851                 ;;
852         esac
853         COMPREPLY=()
856 _git_grep ()
858         __git_has_doubledash && return
860         local cur="${COMP_WORDS[COMP_CWORD]}"
861         case "$cur" in
862         --*)
863                 __gitcomp "
864                         --cached
865                         --text --ignore-case --word-regexp --invert-match
866                         --full-name
867                         --extended-regexp --basic-regexp --fixed-strings
868                         --files-with-matches --name-only
869                         --files-without-match
870                         --count
871                         --and --or --not --all-match
872                         "
873                 return
874                 ;;
875         esac
876         COMPREPLY=()
879 _git_help ()
881         local cur="${COMP_WORDS[COMP_CWORD]}"
882         case "$cur" in
883         --*)
884                 __gitcomp "--all --info --man --web"
885                 return
886                 ;;
887         esac
888         __gitcomp "$(__git_all_commands)"
891 _git_init ()
893         local cur="${COMP_WORDS[COMP_CWORD]}"
894         case "$cur" in
895         --shared=*)
896                 __gitcomp "
897                         false true umask group all world everybody
898                         " "" "${cur##--shared=}"
899                 return
900                 ;;
901         --*)
902                 __gitcomp "--quiet --bare --template= --shared --shared="
903                 return
904                 ;;
905         esac
906         COMPREPLY=()
909 _git_ls_files ()
911         __git_has_doubledash && return
913         local cur="${COMP_WORDS[COMP_CWORD]}"
914         case "$cur" in
915         --*)
916                 __gitcomp "--cached --deleted --modified --others --ignored
917                         --stage --directory --no-empty-directory --unmerged
918                         --killed --exclude= --exclude-from=
919                         --exclude-per-directory= --exclude-standard
920                         --error-unmatch --with-tree= --full-name
921                         --abbrev --ignored --exclude-per-directory
922                         "
923                 return
924                 ;;
925         esac
926         COMPREPLY=()
929 _git_ls_remote ()
931         __gitcomp "$(__git_remotes)"
934 _git_ls_tree ()
936         __git_complete_file
939 _git_log ()
941         __git_has_doubledash && return
943         local cur="${COMP_WORDS[COMP_CWORD]}"
944         case "$cur" in
945         --pretty=*)
946                 __gitcomp "
947                         oneline short medium full fuller email raw
948                         " "" "${cur##--pretty=}"
949                 return
950                 ;;
951         --date=*)
952                 __gitcomp "
953                         relative iso8601 rfc2822 short local default
954                 " "" "${cur##--date=}"
955                 return
956                 ;;
957         --*)
958                 __gitcomp "
959                         --max-count= --max-age= --since= --after=
960                         --min-age= --before= --until=
961                         --root --topo-order --date-order --reverse
962                         --no-merges --follow
963                         --abbrev-commit --abbrev=
964                         --relative-date --date=
965                         --author= --committer= --grep=
966                         --all-match
967                         --pretty= --name-status --name-only --raw
968                         --not --all
969                         --left-right --cherry-pick
970                         --graph
971                         --stat --numstat --shortstat
972                         --decorate --diff-filter=
973                         --color-words --walk-reflogs
974                         --parents --children --full-history
975                         "
976                 return
977                 ;;
978         esac
979         __git_complete_revlist
982 _git_merge ()
984         local cur="${COMP_WORDS[COMP_CWORD]}"
985         case "${COMP_WORDS[COMP_CWORD-1]}" in
986         -s|--strategy)
987                 __gitcomp "$(__git_merge_strategies)"
988                 return
989         esac
990         case "$cur" in
991         --strategy=*)
992                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
993                 return
994                 ;;
995         --*)
996                 __gitcomp "
997                         --no-commit --no-stat --log --no-log --squash --strategy
998                         "
999                 return
1000         esac
1001         __gitcomp "$(__git_refs)"
1004 _git_mergetool ()
1006         local cur="${COMP_WORDS[COMP_CWORD]}"
1007         case "$cur" in
1008         --tool=*)
1009                 __gitcomp "
1010                         kdiff3 tkdiff meld xxdiff emerge
1011                         vimdiff gvimdiff ecmerge opendiff
1012                         " "" "${cur##--tool=}"
1013                 return
1014                 ;;
1015         --*)
1016                 __gitcomp "--tool="
1017                 return
1018                 ;;
1019         esac
1020         COMPREPLY=()
1023 _git_merge_base ()
1025         __gitcomp "$(__git_refs)"
1028 _git_mv ()
1030         local cur="${COMP_WORDS[COMP_CWORD]}"
1031         case "$cur" in
1032         --*)
1033                 __gitcomp "--dry-run"
1034                 return
1035                 ;;
1036         esac
1037         COMPREPLY=()
1040 _git_name_rev ()
1042         __gitcomp "--tags --all --stdin"
1045 _git_pull ()
1047         local cur="${COMP_WORDS[COMP_CWORD]}"
1049         case "${COMP_WORDS[0]},$COMP_CWORD" in
1050         git-pull*,1)
1051                 __gitcomp "$(__git_remotes)"
1052                 ;;
1053         git,2)
1054                 __gitcomp "$(__git_remotes)"
1055                 ;;
1056         *)
1057                 local remote
1058                 case "${COMP_WORDS[0]}" in
1059                 git-pull)  remote="${COMP_WORDS[1]}" ;;
1060                 git)       remote="${COMP_WORDS[2]}" ;;
1061                 esac
1062                 __gitcomp "$(__git_refs "$remote")"
1063                 ;;
1064         esac
1067 _git_push ()
1069         local cur="${COMP_WORDS[COMP_CWORD]}"
1071         case "${COMP_WORDS[0]},$COMP_CWORD" in
1072         git-push*,1)
1073                 __gitcomp "$(__git_remotes)"
1074                 ;;
1075         git,2)
1076                 __gitcomp "$(__git_remotes)"
1077                 ;;
1078         *)
1079                 case "$cur" in
1080                 *:*)
1081                         local remote
1082                         case "${COMP_WORDS[0]}" in
1083                         git-push)  remote="${COMP_WORDS[1]}" ;;
1084                         git)       remote="${COMP_WORDS[2]}" ;;
1085                         esac
1087                         local pfx=""
1088                         case "$COMP_WORDBREAKS" in
1089                         *:*) : great ;;
1090                         *)   pfx="${cur%%:*}:" ;;
1091                         esac
1093                         __gitcomp "$(__git_refs "$remote")" "$pfx" "${cur#*:}"
1094                         ;;
1095                 +*)
1096                         __gitcomp "$(__git_refs)" + "${cur#+}"
1097                         ;;
1098                 *)
1099                         __gitcomp "$(__git_refs)"
1100                         ;;
1101                 esac
1102                 ;;
1103         esac
1106 _git_rebase ()
1108         local cur="${COMP_WORDS[COMP_CWORD]}" dir="$(__gitdir)"
1109         if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then
1110                 __gitcomp "--continue --skip --abort"
1111                 return
1112         fi
1113         case "${COMP_WORDS[COMP_CWORD-1]}" in
1114         -s|--strategy)
1115                 __gitcomp "$(__git_merge_strategies)"
1116                 return
1117         esac
1118         case "$cur" in
1119         --strategy=*)
1120                 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
1121                 return
1122                 ;;
1123         --*)
1124                 __gitcomp "--onto --merge --strategy --interactive"
1125                 return
1126         esac
1127         __gitcomp "$(__git_refs)"
1130 _git_send_email ()
1132         local cur="${COMP_WORDS[COMP_CWORD]}"
1133         case "$cur" in
1134         --*)
1135                 __gitcomp "--bcc --cc --cc-cmd --chain-reply-to --compose
1136                         --dry-run --envelope-sender --from --identity
1137                         --in-reply-to --no-chain-reply-to --no-signed-off-by-cc
1138                         --no-suppress-from --no-thread --quiet
1139                         --signed-off-by-cc --smtp-pass --smtp-server
1140                         --smtp-server-port --smtp-ssl --smtp-user --subject
1141                         --suppress-cc --suppress-from --thread --to"
1142                 return
1143                 ;;
1144         esac
1145         COMPREPLY=()
1148 _git_config ()
1150         local cur="${COMP_WORDS[COMP_CWORD]}"
1151         local prv="${COMP_WORDS[COMP_CWORD-1]}"
1152         case "$prv" in
1153         branch.*.remote)
1154                 __gitcomp "$(__git_remotes)"
1155                 return
1156                 ;;
1157         branch.*.merge)
1158                 __gitcomp "$(__git_refs)"
1159                 return
1160                 ;;
1161         remote.*.fetch)
1162                 local remote="${prv#remote.}"
1163                 remote="${remote%.fetch}"
1164                 __gitcomp "$(__git_refs_remotes "$remote")"
1165                 return
1166                 ;;
1167         remote.*.push)
1168                 local remote="${prv#remote.}"
1169                 remote="${remote%.push}"
1170                 __gitcomp "$(git --git-dir="$(__gitdir)" \
1171                         for-each-ref --format='%(refname):%(refname)' \
1172                         refs/heads)"
1173                 return
1174                 ;;
1175         pull.twohead|pull.octopus)
1176                 __gitcomp "$(__git_merge_strategies)"
1177                 return
1178                 ;;
1179         color.branch|color.diff|color.status)
1180                 __gitcomp "always never auto"
1181                 return
1182                 ;;
1183         color.*.*)
1184                 __gitcomp "
1185                         black red green yellow blue magenta cyan white
1186                         bold dim ul blink reverse
1187                         "
1188                 return
1189                 ;;
1190         *.*)
1191                 COMPREPLY=()
1192                 return
1193                 ;;
1194         esac
1195         case "$cur" in
1196         --*)
1197                 __gitcomp "
1198                         --global --system --file=
1199                         --list --replace-all
1200                         --get --get-all --get-regexp
1201                         --add --unset --unset-all
1202                         --remove-section --rename-section
1203                         "
1204                 return
1205                 ;;
1206         branch.*.*)
1207                 local pfx="${cur%.*}."
1208                 cur="${cur##*.}"
1209                 __gitcomp "remote merge" "$pfx" "$cur"
1210                 return
1211                 ;;
1212         branch.*)
1213                 local pfx="${cur%.*}."
1214                 cur="${cur#*.}"
1215                 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
1216                 return
1217                 ;;
1218         remote.*.*)
1219                 local pfx="${cur%.*}."
1220                 cur="${cur##*.}"
1221                 __gitcomp "
1222                         url fetch push skipDefaultUpdate
1223                         receivepack uploadpack tagopt
1224                         " "$pfx" "$cur"
1225                 return
1226                 ;;
1227         remote.*)
1228                 local pfx="${cur%.*}."
1229                 cur="${cur#*.}"
1230                 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
1231                 return
1232                 ;;
1233         esac
1234         __gitcomp "
1235                 apply.whitespace
1236                 core.fileMode
1237                 core.gitProxy
1238                 core.ignoreStat
1239                 core.preferSymlinkRefs
1240                 core.logAllRefUpdates
1241                 core.loosecompression
1242                 core.repositoryFormatVersion
1243                 core.sharedRepository
1244                 core.warnAmbiguousRefs
1245                 core.compression
1246                 core.packedGitWindowSize
1247                 core.packedGitLimit
1248                 clean.requireForce
1249                 color.branch
1250                 color.branch.current
1251                 color.branch.local
1252                 color.branch.remote
1253                 color.branch.plain
1254                 color.diff
1255                 color.diff.plain
1256                 color.diff.meta
1257                 color.diff.frag
1258                 color.diff.old
1259                 color.diff.new
1260                 color.diff.commit
1261                 color.diff.whitespace
1262                 color.pager
1263                 color.status
1264                 color.status.header
1265                 color.status.added
1266                 color.status.changed
1267                 color.status.untracked
1268                 diff.renameLimit
1269                 diff.renames
1270                 fetch.unpackLimit
1271                 format.headers
1272                 format.subjectprefix
1273                 gitcvs.enabled
1274                 gitcvs.logfile
1275                 gitcvs.allbinary
1276                 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dbpass
1277                 gitcvs.dbtablenameprefix
1278                 gc.packrefs
1279                 gc.reflogexpire
1280                 gc.reflogexpireunreachable
1281                 gc.rerereresolved
1282                 gc.rerereunresolved
1283                 http.sslVerify
1284                 http.sslCert
1285                 http.sslKey
1286                 http.sslCAInfo
1287                 http.sslCAPath
1288                 http.maxRequests
1289                 http.lowSpeedLimit
1290                 http.lowSpeedTime
1291                 http.noEPSV
1292                 i18n.commitEncoding
1293                 i18n.logOutputEncoding
1294                 log.showroot
1295                 merge.tool
1296                 merge.summary
1297                 merge.verbosity
1298                 pack.window
1299                 pack.depth
1300                 pack.windowMemory
1301                 pack.compression
1302                 pack.deltaCacheSize
1303                 pack.deltaCacheLimit
1304                 pull.octopus
1305                 pull.twohead
1306                 repack.useDeltaBaseOffset
1307                 showbranch.default
1308                 tar.umask
1309                 transfer.unpackLimit
1310                 receive.unpackLimit
1311                 receive.denyNonFastForwards
1312                 user.name
1313                 user.email
1314                 user.signingkey
1315                 branch. remote.
1316         "
1319 _git_remote ()
1321         local subcommands="add rm show prune update"
1322         local subcommand="$(__git_find_subcommand "$subcommands")"
1323         if [ -z "$subcommand" ]; then
1324                 __gitcomp "$subcommands"
1325                 return
1326         fi
1328         case "$subcommand" in
1329         rm|show|prune)
1330                 __gitcomp "$(__git_remotes)"
1331                 ;;
1332         update)
1333                 local i c='' IFS=$'\n'
1334                 for i in $(git --git-dir="$(__gitdir)" config --list); do
1335                         case "$i" in
1336                         remotes.*)
1337                                 i="${i#remotes.}"
1338                                 c="$c ${i/=*/}"
1339                                 ;;
1340                         esac
1341                 done
1342                 __gitcomp "$c"
1343                 ;;
1344         *)
1345                 COMPREPLY=()
1346                 ;;
1347         esac
1350 _git_reset ()
1352         __git_has_doubledash && return
1354         local cur="${COMP_WORDS[COMP_CWORD]}"
1355         case "$cur" in
1356         --*)
1357                 __gitcomp "--mixed --hard --soft"
1358                 return
1359                 ;;
1360         esac
1361         __gitcomp "$(__git_refs)"
1364 _git_revert ()
1366         local cur="${COMP_WORDS[COMP_CWORD]}"
1367         case "$cur" in
1368         --*)
1369                 __gitcomp "--edit --mainline --no-edit --no-commit --signoff"
1370                 return
1371                 ;;
1372         esac
1373         COMPREPLY=()
1376 _git_rm ()
1378         __git_has_doubledash && return
1380         local cur="${COMP_WORDS[COMP_CWORD]}"
1381         case "$cur" in
1382         --*)
1383                 __gitcomp "--cached --dry-run --ignore-unmatch --quiet"
1384                 return
1385                 ;;
1386         esac
1387         COMPREPLY=()
1390 _git_shortlog ()
1392         __git_has_doubledash && return
1394         local cur="${COMP_WORDS[COMP_CWORD]}"
1395         case "$cur" in
1396         --*)
1397                 __gitcomp "
1398                         --max-count= --max-age= --since= --after=
1399                         --min-age= --before= --until=
1400                         --no-merges
1401                         --author= --committer= --grep=
1402                         --all-match
1403                         --not --all
1404                         --numbered --summary
1405                         "
1406                 return
1407                 ;;
1408         esac
1409         __git_complete_revlist
1412 _git_show ()
1414         local cur="${COMP_WORDS[COMP_CWORD]}"
1415         case "$cur" in
1416         --pretty=*)
1417                 __gitcomp "
1418                         oneline short medium full fuller email raw
1419                         " "" "${cur##--pretty=}"
1420                 return
1421                 ;;
1422         --*)
1423                 __gitcomp "--pretty="
1424                 return
1425                 ;;
1426         esac
1427         __git_complete_file
1430 _git_show_branch ()
1432         local cur="${COMP_WORDS[COMP_CWORD]}"
1433         case "$cur" in
1434         --*)
1435                 __gitcomp "
1436                         --all --remotes --topo-order --current --more=
1437                         --list --independent --merge-base --no-name
1438                         --sha1-name --topics --reflog
1439                         "
1440                 return
1441                 ;;
1442         esac
1443         __git_complete_revlist
1446 _git_stash ()
1448         local subcommands='save list show apply clear drop pop create branch'
1449         local subcommand="$(__git_find_subcommand "$subcommands")"
1450         if [ -z "$subcommand" ]; then
1451                 __gitcomp "$subcommands"
1452         else
1453                 local cur="${COMP_WORDS[COMP_CWORD]}"
1454                 case "$subcommand,$cur" in
1455                 save,--*)
1456                         __gitcomp "--keep-index"
1457                         ;;
1458                 apply,--*)
1459                         __gitcomp "--index"
1460                         ;;
1461                 show,--*|drop,--*|pop,--*|branch,--*)
1462                         COMPREPLY=()
1463                         ;;
1464                 show,*|apply,*|drop,*|pop,*|branch,*)
1465                         __gitcomp "$(git --git-dir="$(__gitdir)" stash list \
1466                                         | sed -n -e 's/:.*//p')"
1467                         ;;
1468                 *)
1469                         COMPREPLY=()
1470                         ;;
1471                 esac
1472         fi
1475 _git_submodule ()
1477         __git_has_doubledash && return
1479         local subcommands="add status init update"
1480         if [ -z "$(__git_find_subcommand "$subcommands")" ]; then
1481                 local cur="${COMP_WORDS[COMP_CWORD]}"
1482                 case "$cur" in
1483                 --*)
1484                         __gitcomp "--quiet --cached"
1485                         ;;
1486                 *)
1487                         __gitcomp "$subcommands"
1488                         ;;
1489                 esac
1490                 return
1491         fi
1494 _git_svn ()
1496         local subcommands="
1497                 init fetch clone rebase dcommit log find-rev
1498                 set-tree commit-diff info create-ignore propget
1499                 proplist show-ignore show-externals
1500                 "
1501         local subcommand="$(__git_find_subcommand "$subcommands")"
1502         if [ -z "$subcommand" ]; then
1503                 __gitcomp "$subcommands"
1504         else
1505                 local remote_opts="--username= --config-dir= --no-auth-cache"
1506                 local fc_opts="
1507                         --follow-parent --authors-file= --repack=
1508                         --no-metadata --use-svm-props --use-svnsync-props
1509                         --log-window-size= --no-checkout --quiet
1510                         --repack-flags --user-log-author $remote_opts
1511                         "
1512                 local init_opts="
1513                         --template= --shared= --trunk= --tags=
1514                         --branches= --stdlayout --minimize-url
1515                         --no-metadata --use-svm-props --use-svnsync-props
1516                         --rewrite-root= $remote_opts
1517                         "
1518                 local cmt_opts="
1519                         --edit --rmdir --find-copies-harder --copy-similarity=
1520                         "
1522                 local cur="${COMP_WORDS[COMP_CWORD]}"
1523                 case "$subcommand,$cur" in
1524                 fetch,--*)
1525                         __gitcomp "--revision= --fetch-all $fc_opts"
1526                         ;;
1527                 clone,--*)
1528                         __gitcomp "--revision= $fc_opts $init_opts"
1529                         ;;
1530                 init,--*)
1531                         __gitcomp "$init_opts"
1532                         ;;
1533                 dcommit,--*)
1534                         __gitcomp "
1535                                 --merge --strategy= --verbose --dry-run
1536                                 --fetch-all --no-rebase $cmt_opts $fc_opts
1537                                 "
1538                         ;;
1539                 set-tree,--*)
1540                         __gitcomp "--stdin $cmt_opts $fc_opts"
1541                         ;;
1542                 create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\
1543                 show-externals,--*)
1544                         __gitcomp "--revision="
1545                         ;;
1546                 log,--*)
1547                         __gitcomp "
1548                                 --limit= --revision= --verbose --incremental
1549                                 --oneline --show-commit --non-recursive
1550                                 --authors-file=
1551                                 "
1552                         ;;
1553                 rebase,--*)
1554                         __gitcomp "
1555                                 --merge --verbose --strategy= --local
1556                                 --fetch-all $fc_opts
1557                                 "
1558                         ;;
1559                 commit-diff,--*)
1560                         __gitcomp "--message= --file= --revision= $cmt_opts"
1561                         ;;
1562                 info,--*)
1563                         __gitcomp "--url"
1564                         ;;
1565                 *)
1566                         COMPREPLY=()
1567                         ;;
1568                 esac
1569         fi
1572 _git_tag ()
1574         local i c=1 f=0
1575         while [ $c -lt $COMP_CWORD ]; do
1576                 i="${COMP_WORDS[c]}"
1577                 case "$i" in
1578                 -d|-v)
1579                         __gitcomp "$(__git_tags)"
1580                         return
1581                         ;;
1582                 -f)
1583                         f=1
1584                         ;;
1585                 esac
1586                 c=$((++c))
1587         done
1589         case "${COMP_WORDS[COMP_CWORD-1]}" in
1590         -m|-F)
1591                 COMPREPLY=()
1592                 ;;
1593         -*|tag|git-tag)
1594                 if [ $f = 1 ]; then
1595                         __gitcomp "$(__git_tags)"
1596                 else
1597                         COMPREPLY=()
1598                 fi
1599                 ;;
1600         *)
1601                 __gitcomp "$(__git_refs)"
1602                 ;;
1603         esac
1606 _git ()
1608         local i c=1 command __git_dir
1610         while [ $c -lt $COMP_CWORD ]; do
1611                 i="${COMP_WORDS[c]}"
1612                 case "$i" in
1613                 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1614                 --bare)      __git_dir="." ;;
1615                 --version|-p|--paginate) ;;
1616                 --help) command="help"; break ;;
1617                 *) command="$i"; break ;;
1618                 esac
1619                 c=$((++c))
1620         done
1622         if [ -z "$command" ]; then
1623                 case "${COMP_WORDS[COMP_CWORD]}" in
1624                 --*=*) COMPREPLY=() ;;
1625                 --*)   __gitcomp "
1626                         --paginate
1627                         --no-pager
1628                         --git-dir=
1629                         --bare
1630                         --version
1631                         --exec-path
1632                         --work-tree=
1633                         --help
1634                         "
1635                         ;;
1636                 *)     __gitcomp "$(__git_porcelain_commands) $(__git_aliases)" ;;
1637                 esac
1638                 return
1639         fi
1641         local expansion=$(__git_aliased_command "$command")
1642         [ "$expansion" ] && command="$expansion"
1644         case "$command" in
1645         am)          _git_am ;;
1646         add)         _git_add ;;
1647         apply)       _git_apply ;;
1648         archive)     _git_archive ;;
1649         bisect)      _git_bisect ;;
1650         bundle)      _git_bundle ;;
1651         branch)      _git_branch ;;
1652         checkout)    _git_checkout ;;
1653         cherry)      _git_cherry ;;
1654         cherry-pick) _git_cherry_pick ;;
1655         clean)       _git_clean ;;
1656         clone)       _git_clone ;;
1657         commit)      _git_commit ;;
1658         config)      _git_config ;;
1659         describe)    _git_describe ;;
1660         diff)        _git_diff ;;
1661         fetch)       _git_fetch ;;
1662         format-patch) _git_format_patch ;;
1663         gc)          _git_gc ;;
1664         grep)        _git_grep ;;
1665         help)        _git_help ;;
1666         init)        _git_init ;;
1667         log)         _git_log ;;
1668         ls-files)    _git_ls_files ;;
1669         ls-remote)   _git_ls_remote ;;
1670         ls-tree)     _git_ls_tree ;;
1671         merge)       _git_merge;;
1672         mergetool)   _git_mergetool;;
1673         merge-base)  _git_merge_base ;;
1674         mv)          _git_mv ;;
1675         name-rev)    _git_name_rev ;;
1676         pull)        _git_pull ;;
1677         push)        _git_push ;;
1678         rebase)      _git_rebase ;;
1679         remote)      _git_remote ;;
1680         reset)       _git_reset ;;
1681         revert)      _git_revert ;;
1682         rm)          _git_rm ;;
1683         send-email)  _git_send_email ;;
1684         shortlog)    _git_shortlog ;;
1685         show)        _git_show ;;
1686         show-branch) _git_show_branch ;;
1687         stash)       _git_stash ;;
1688         submodule)   _git_submodule ;;
1689         svn)         _git_svn ;;
1690         tag)         _git_tag ;;
1691         whatchanged) _git_log ;;
1692         *)           COMPREPLY=() ;;
1693         esac
1696 _gitk ()
1698         __git_has_doubledash && return
1700         local cur="${COMP_WORDS[COMP_CWORD]}"
1701         local g="$(git rev-parse --git-dir 2>/dev/null)"
1702         local merge=""
1703         if [ -f $g/MERGE_HEAD ]; then
1704                 merge="--merge"
1705         fi
1706         case "$cur" in
1707         --*)
1708                 __gitcomp "--not --all $merge"
1709                 return
1710                 ;;
1711         esac
1712         __git_complete_revlist
1715 complete -o default -o nospace -F _git git
1716 complete -o default -o nospace -F _gitk gitk
1718 # The following are necessary only for Cygwin, and only are needed
1719 # when the user has tab-completed the executable name and consequently
1720 # included the '.exe' suffix.
1722 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1723 complete -o default -o nospace -F _git git.exe
1724 fi