git-completion.bash - add support for git-bundle
[git/mjg.git] / contrib / completion / git-completion.bash
blob52b2893844ac4866573a078c0f99cc8fd6cd56f6
2 # bash completion support for core Git.
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.
8 # The contained completion routines provide support for completing:
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
17 # To use these routines:
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
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.
29 # 4) Consider changing your PS1 to also show the current branch:
30 # PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '
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.
36 # To submit patches:
38 # *) Read Documentation/SubmittingPatches
39 # *) Send all patches to the current maintainer:
41 # "Shawn O. Pearce" <spearce@spearce.org>
43 # *) Always CC the Git mailing list:
45 # git@vger.kernel.org
48 __gitdir ()
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
58 elif [ -d "$1/.git" ]; then
59 echo "$1/.git"
60 else
61 echo "$1"
65 __git_ps1 ()
67 local b="$(git symbolic-ref HEAD 2>/dev/null)"
68 if [ -n "$b" ]; then
69 if [ -n "$1" ]; then
70 printf "$1" "${b##refs/heads/}"
71 else
72 printf " (%s)" "${b##refs/heads/}"
77 __gitcomp ()
79 local all c s=$'\n' IFS=' '$'\t'$'\n'
80 local cur="${COMP_WORDS[COMP_CWORD]}"
81 if [ $# -gt 2 ]; then
82 cur="$3"
84 for c in $1; do
85 case "$c$4" in
86 --*=*) all="$all$c$4$s" ;;
87 *.) all="$all$c$4$s" ;;
88 *) all="$all$c$4 $s" ;;
89 esac
90 done
91 IFS=$s
92 COMPREPLY=($(compgen -P "$2" -W "$all" -- "$cur"))
93 return
96 __git_heads ()
98 local cmd i is_hash=y dir="$(__gitdir "$1")"
99 if [ -d "$dir" ]; then
100 for i in $(git --git-dir="$dir" \
101 for-each-ref --format='%(refname)' \
102 refs/heads ); do
103 echo "${i#refs/heads/}"
104 done
105 return
107 for i in $(git-ls-remote "$1" 2>/dev/null); do
108 case "$is_hash,$i" in
109 y,*) is_hash=n ;;
110 n,*^{}) is_hash=y ;;
111 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
112 n,*) is_hash=y; echo "$i" ;;
113 esac
114 done
117 __git_refs ()
119 local cmd i is_hash=y dir="$(__gitdir "$1")"
120 if [ -d "$dir" ]; then
121 if [ -e "$dir/HEAD" ]; then echo HEAD; fi
122 for i in $(git --git-dir="$dir" \
123 for-each-ref --format='%(refname)' \
124 refs/tags refs/heads refs/remotes); do
125 case "$i" in
126 refs/tags/*) echo "${i#refs/tags/}" ;;
127 refs/heads/*) echo "${i#refs/heads/}" ;;
128 refs/remotes/*) echo "${i#refs/remotes/}" ;;
129 *) echo "$i" ;;
130 esac
131 done
132 return
134 for i in $(git-ls-remote "$dir" 2>/dev/null); do
135 case "$is_hash,$i" in
136 y,*) is_hash=n ;;
137 n,*^{}) is_hash=y ;;
138 n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;;
139 n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;;
140 n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;;
141 n,*) is_hash=y; echo "$i" ;;
142 esac
143 done
146 __git_refs2 ()
148 local i
149 for i in $(__git_refs "$1"); do
150 echo "$i:$i"
151 done
154 __git_refs_remotes ()
156 local cmd i is_hash=y
157 for i in $(git-ls-remote "$1" 2>/dev/null); do
158 case "$is_hash,$i" in
159 n,refs/heads/*)
160 is_hash=y
161 echo "$i:refs/remotes/$1/${i#refs/heads/}"
163 y,*) is_hash=n ;;
164 n,*^{}) is_hash=y ;;
165 n,refs/tags/*) is_hash=y;;
166 n,*) is_hash=y; ;;
167 esac
168 done
171 __git_remotes ()
173 local i ngoff IFS=$'\n' d="$(__gitdir)"
174 shopt -q nullglob || ngoff=1
175 shopt -s nullglob
176 for i in "$d/remotes"/*; do
177 echo ${i#$d/remotes/}
178 done
179 [ "$ngoff" ] && shopt -u nullglob
180 for i in $(git --git-dir="$d" config --list); do
181 case "$i" in
182 remote.*.url=*)
183 i="${i#remote.}"
184 echo "${i/.url=*/}"
186 esac
187 done
190 __git_merge_strategies ()
192 if [ -n "$__git_merge_strategylist" ]; then
193 echo "$__git_merge_strategylist"
194 return
196 sed -n "/^all_strategies='/{
197 s/^all_strategies='//
198 s/'//
201 }" "$(git --exec-path)/git-merge"
203 __git_merge_strategylist=
204 __git_merge_strategylist="$(__git_merge_strategies 2>/dev/null)"
206 __git_complete_file ()
208 local pfx ls ref cur="${COMP_WORDS[COMP_CWORD]}"
209 case "$cur" in
210 ?*:*)
211 ref="${cur%%:*}"
212 cur="${cur#*:}"
213 case "$cur" in
214 ?*/*)
215 pfx="${cur%/*}"
216 cur="${cur##*/}"
217 ls="$ref:$pfx"
218 pfx="$pfx/"
221 ls="$ref"
223 esac
224 COMPREPLY=($(compgen -P "$pfx" \
225 -W "$(git --git-dir="$(__gitdir)" ls-tree "$ls" \
226 | sed '/^100... blob /s,^.* ,,
227 /^040000 tree /{
228 s,^.* ,,
229 s,$,/,
231 s/^.* //')" \
232 -- "$cur"))
235 __gitcomp "$(__git_refs)"
237 esac
240 __git_complete_revlist ()
242 local pfx cur="${COMP_WORDS[COMP_CWORD]}"
243 case "$cur" in
244 *...*)
245 pfx="${cur%...*}..."
246 cur="${cur#*...}"
247 __gitcomp "$(__git_refs)" "$pfx" "$cur"
249 *..*)
250 pfx="${cur%..*}.."
251 cur="${cur#*..}"
252 __gitcomp "$(__git_refs)" "$pfx" "$cur"
255 __gitcomp "$cur."
258 __gitcomp "$(__git_refs)"
260 esac
263 __git_commands ()
265 if [ -n "$__git_commandlist" ]; then
266 echo "$__git_commandlist"
267 return
269 local i IFS=" "$'\n'
270 for i in $(git help -a|egrep '^ ')
272 case $i in
273 add--interactive) : plumbing;;
274 applymbox) : ask gittus;;
275 applypatch) : ask gittus;;
276 archimport) : import;;
277 cat-file) : plumbing;;
278 check-attr) : plumbing;;
279 check-ref-format) : plumbing;;
280 commit-tree) : plumbing;;
281 convert-objects) : plumbing;;
282 cvsexportcommit) : export;;
283 cvsimport) : import;;
284 cvsserver) : daemon;;
285 daemon) : daemon;;
286 diff-files) : plumbing;;
287 diff-index) : plumbing;;
288 diff-tree) : plumbing;;
289 fast-import) : import;;
290 fsck-objects) : plumbing;;
291 fetch--tool) : plumbing;;
292 fetch-pack) : plumbing;;
293 fmt-merge-msg) : plumbing;;
294 for-each-ref) : plumbing;;
295 hash-object) : plumbing;;
296 http-*) : transport;;
297 index-pack) : plumbing;;
298 init-db) : deprecated;;
299 local-fetch) : plumbing;;
300 mailinfo) : plumbing;;
301 mailsplit) : plumbing;;
302 merge-*) : plumbing;;
303 mktree) : plumbing;;
304 mktag) : plumbing;;
305 pack-objects) : plumbing;;
306 pack-redundant) : plumbing;;
307 pack-refs) : plumbing;;
308 parse-remote) : plumbing;;
309 patch-id) : plumbing;;
310 peek-remote) : plumbing;;
311 prune) : plumbing;;
312 prune-packed) : plumbing;;
313 quiltimport) : import;;
314 read-tree) : plumbing;;
315 receive-pack) : plumbing;;
316 reflog) : plumbing;;
317 repo-config) : plumbing;;
318 rerere) : plumbing;;
319 rev-list) : plumbing;;
320 rev-parse) : plumbing;;
321 runstatus) : plumbing;;
322 sh-setup) : internal;;
323 shell) : daemon;;
324 send-pack) : plumbing;;
325 show-index) : plumbing;;
326 ssh-*) : transport;;
327 stripspace) : plumbing;;
328 svn) : import export;;
329 svnimport) : import;;
330 symbolic-ref) : plumbing;;
331 tar-tree) : deprecated;;
332 unpack-file) : plumbing;;
333 unpack-objects) : plumbing;;
334 update-index) : plumbing;;
335 update-ref) : plumbing;;
336 update-server-info) : daemon;;
337 upload-archive) : plumbing;;
338 upload-pack) : plumbing;;
339 write-tree) : plumbing;;
340 verify-tag) : plumbing;;
341 *) echo $i;;
342 esac
343 done
345 __git_commandlist=
346 __git_commandlist="$(__git_commands 2>/dev/null)"
348 __git_aliases ()
350 local i IFS=$'\n'
351 for i in $(git --git-dir="$(__gitdir)" config --list); do
352 case "$i" in
353 alias.*)
354 i="${i#alias.}"
355 echo "${i/=*/}"
357 esac
358 done
361 __git_aliased_command ()
363 local word cmdline=$(git --git-dir="$(__gitdir)" \
364 config --get "alias.$1")
365 for word in $cmdline; do
366 if [ "${word##-*}" ]; then
367 echo $word
368 return
370 done
373 __git_whitespacelist="nowarn warn error error-all strip"
375 _git_am ()
377 local cur="${COMP_WORDS[COMP_CWORD]}"
378 if [ -d .dotest ]; then
379 __gitcomp "--skip --resolved"
380 return
382 case "$cur" in
383 --whitespace=*)
384 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
385 return
387 --*)
388 __gitcomp "
389 --signoff --utf8 --binary --3way --interactive
390 --whitespace=
392 return
393 esac
394 COMPREPLY=()
397 _git_apply ()
399 local cur="${COMP_WORDS[COMP_CWORD]}"
400 case "$cur" in
401 --whitespace=*)
402 __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}"
403 return
405 --*)
406 __gitcomp "
407 --stat --numstat --summary --check --index
408 --cached --index-info --reverse --reject --unidiff-zero
409 --apply --no-add --exclude=
410 --whitespace= --inaccurate-eof --verbose
412 return
413 esac
414 COMPREPLY=()
417 _git_add ()
419 local cur="${COMP_WORDS[COMP_CWORD]}"
420 case "$cur" in
421 --*)
422 __gitcomp "--interactive"
423 return
424 esac
425 COMPREPLY=()
428 _git_bisect ()
430 local i c=1 command
431 while [ $c -lt $COMP_CWORD ]; do
432 i="${COMP_WORDS[c]}"
433 case "$i" in
434 start|bad|good|reset|visualize|replay|log)
435 command="$i"
436 break
438 esac
439 c=$((++c))
440 done
442 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
443 __gitcomp "start bad good reset visualize replay log"
444 return
447 case "$command" in
448 bad|good|reset)
449 __gitcomp "$(__git_refs)"
452 COMPREPLY=()
454 esac
457 _git_branch ()
459 __gitcomp "$(__git_refs)"
462 _git_bundle ()
464 local mycword="$COMP_CWORD"
465 case "${COMP_WORDS[0]}" in
466 git)
467 local cmd="${COMP_WORDS[2]}"
468 mycword="$((mycword-1))"
470 git-bundle*)
471 local cmd="${COMP_WORDS[1]}"
473 esac
474 case "$mycword" in
476 __gitcomp "create list-heads verify unbundle"
479 # looking for a file
482 case "$cmd" in
483 create)
484 __git_complete_revlist
486 esac
488 esac
491 _git_checkout ()
493 __gitcomp "$(__git_refs)"
496 _git_cherry ()
498 __gitcomp "$(__git_refs)"
501 _git_cherry_pick ()
503 local cur="${COMP_WORDS[COMP_CWORD]}"
504 case "$cur" in
505 --*)
506 __gitcomp "--edit --no-commit"
509 __gitcomp "$(__git_refs)"
511 esac
514 _git_commit ()
516 local cur="${COMP_WORDS[COMP_CWORD]}"
517 case "$cur" in
518 --*)
519 __gitcomp "
520 --all --author= --signoff --verify --no-verify
521 --edit --amend --include --only
523 return
524 esac
525 COMPREPLY=()
528 _git_diff ()
530 __git_complete_file
533 _git_diff_tree ()
535 __gitcomp "$(__git_refs)"
538 _git_fetch ()
540 local cur="${COMP_WORDS[COMP_CWORD]}"
542 case "${COMP_WORDS[0]},$COMP_CWORD" in
543 git-fetch*,1)
544 __gitcomp "$(__git_remotes)"
546 git,2)
547 __gitcomp "$(__git_remotes)"
550 case "$cur" in
551 *:*)
552 __gitcomp "$(__git_refs)" "" "${cur#*:}"
555 local remote
556 case "${COMP_WORDS[0]}" in
557 git-fetch) remote="${COMP_WORDS[1]}" ;;
558 git) remote="${COMP_WORDS[2]}" ;;
559 esac
560 __gitcomp "$(__git_refs2 "$remote")"
562 esac
564 esac
567 _git_format_patch ()
569 local cur="${COMP_WORDS[COMP_CWORD]}"
570 case "$cur" in
571 --*)
572 __gitcomp "
573 --stdout --attach --thread
574 --output-directory
575 --numbered --start-number
576 --keep-subject
577 --signoff
578 --in-reply-to=
579 --full-index --binary
580 --not --all
582 return
584 esac
585 __git_complete_revlist
588 _git_gc ()
590 local cur="${COMP_WORDS[COMP_CWORD]}"
591 case "$cur" in
592 --*)
593 __gitcomp "--prune"
594 return
596 esac
597 COMPREPLY=()
600 _git_ls_remote ()
602 __gitcomp "$(__git_remotes)"
605 _git_ls_tree ()
607 __git_complete_file
610 _git_log ()
612 local cur="${COMP_WORDS[COMP_CWORD]}"
613 case "$cur" in
614 --pretty=*)
615 __gitcomp "
616 oneline short medium full fuller email raw
617 " "" "${cur##--pretty=}"
618 return
620 --*)
621 __gitcomp "
622 --max-count= --max-age= --since= --after=
623 --min-age= --before= --until=
624 --root --topo-order --date-order --reverse
625 --no-merges
626 --abbrev-commit --abbrev=
627 --relative-date
628 --author= --committer= --grep=
629 --all-match
630 --pretty= --name-status --name-only --raw
631 --not --all
633 return
635 esac
636 __git_complete_revlist
639 _git_merge ()
641 local cur="${COMP_WORDS[COMP_CWORD]}"
642 case "${COMP_WORDS[COMP_CWORD-1]}" in
643 -s|--strategy)
644 __gitcomp "$(__git_merge_strategies)"
645 return
646 esac
647 case "$cur" in
648 --strategy=*)
649 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
650 return
652 --*)
653 __gitcomp "
654 --no-commit --no-summary --squash --strategy
656 return
657 esac
658 __gitcomp "$(__git_refs)"
661 _git_merge_base ()
663 __gitcomp "$(__git_refs)"
666 _git_name_rev ()
668 __gitcomp "--tags --all --stdin"
671 _git_pull ()
673 local cur="${COMP_WORDS[COMP_CWORD]}"
675 case "${COMP_WORDS[0]},$COMP_CWORD" in
676 git-pull*,1)
677 __gitcomp "$(__git_remotes)"
679 git,2)
680 __gitcomp "$(__git_remotes)"
683 local remote
684 case "${COMP_WORDS[0]}" in
685 git-pull) remote="${COMP_WORDS[1]}" ;;
686 git) remote="${COMP_WORDS[2]}" ;;
687 esac
688 __gitcomp "$(__git_refs "$remote")"
690 esac
693 _git_push ()
695 local cur="${COMP_WORDS[COMP_CWORD]}"
697 case "${COMP_WORDS[0]},$COMP_CWORD" in
698 git-push*,1)
699 __gitcomp "$(__git_remotes)"
701 git,2)
702 __gitcomp "$(__git_remotes)"
705 case "$cur" in
706 *:*)
707 local remote
708 case "${COMP_WORDS[0]}" in
709 git-push) remote="${COMP_WORDS[1]}" ;;
710 git) remote="${COMP_WORDS[2]}" ;;
711 esac
712 __gitcomp "$(__git_refs "$remote")" "" "${cur#*:}"
715 __gitcomp "$(__git_refs)" + "${cur#+}"
718 __gitcomp "$(__git_refs)"
720 esac
722 esac
725 _git_rebase ()
727 local cur="${COMP_WORDS[COMP_CWORD]}"
728 if [ -d .dotest ] || [ -d .git/.dotest-merge ]; then
729 __gitcomp "--continue --skip --abort"
730 return
732 case "${COMP_WORDS[COMP_CWORD-1]}" in
733 -s|--strategy)
734 __gitcomp "$(__git_merge_strategies)"
735 return
736 esac
737 case "$cur" in
738 --strategy=*)
739 __gitcomp "$(__git_merge_strategies)" "" "${cur##--strategy=}"
740 return
742 --*)
743 __gitcomp "--onto --merge --strategy"
744 return
745 esac
746 __gitcomp "$(__git_refs)"
749 _git_config ()
751 local cur="${COMP_WORDS[COMP_CWORD]}"
752 local prv="${COMP_WORDS[COMP_CWORD-1]}"
753 case "$prv" in
754 branch.*.remote)
755 __gitcomp "$(__git_remotes)"
756 return
758 branch.*.merge)
759 __gitcomp "$(__git_refs)"
760 return
762 remote.*.fetch)
763 local remote="${prv#remote.}"
764 remote="${remote%.fetch}"
765 __gitcomp "$(__git_refs_remotes "$remote")"
766 return
768 remote.*.push)
769 local remote="${prv#remote.}"
770 remote="${remote%.push}"
771 __gitcomp "$(git --git-dir="$(__gitdir)" \
772 for-each-ref --format='%(refname):%(refname)' \
773 refs/heads)"
774 return
776 pull.twohead|pull.octopus)
777 __gitcomp "$(__git_merge_strategies)"
778 return
780 color.branch|color.diff|color.status)
781 __gitcomp "always never auto"
782 return
784 color.*.*)
785 __gitcomp "
786 black red green yellow blue magenta cyan white
787 bold dim ul blink reverse
789 return
791 *.*)
792 COMPREPLY=()
793 return
795 esac
796 case "$cur" in
797 --*)
798 __gitcomp "
799 --global --system
800 --list --replace-all
801 --get --get-all --get-regexp
802 --add --unset --unset-all
803 --remove-section --rename-section
805 return
807 branch.*.*)
808 local pfx="${cur%.*}."
809 cur="${cur##*.}"
810 __gitcomp "remote merge" "$pfx" "$cur"
811 return
813 branch.*)
814 local pfx="${cur%.*}."
815 cur="${cur#*.}"
816 __gitcomp "$(__git_heads)" "$pfx" "$cur" "."
817 return
819 remote.*.*)
820 local pfx="${cur%.*}."
821 cur="${cur##*.}"
822 __gitcomp "
823 url fetch push skipDefaultUpdate
824 receivepack uploadpack tagopt
825 " "$pfx" "$cur"
826 return
828 remote.*)
829 local pfx="${cur%.*}."
830 cur="${cur#*.}"
831 __gitcomp "$(__git_remotes)" "$pfx" "$cur" "."
832 return
834 esac
835 __gitcomp "
836 apply.whitespace
837 core.fileMode
838 core.gitProxy
839 core.ignoreStat
840 core.preferSymlinkRefs
841 core.logAllRefUpdates
842 core.repositoryFormatVersion
843 core.sharedRepository
844 core.warnAmbiguousRefs
845 core.compression
846 core.legacyHeaders
847 core.packedGitWindowSize
848 core.packedGitLimit
849 clean.requireForce
850 color.branch
851 color.branch.current
852 color.branch.local
853 color.branch.remote
854 color.branch.plain
855 color.diff
856 color.diff.plain
857 color.diff.meta
858 color.diff.frag
859 color.diff.old
860 color.diff.new
861 color.diff.commit
862 color.diff.whitespace
863 color.pager
864 color.status
865 color.status.header
866 color.status.added
867 color.status.changed
868 color.status.untracked
869 diff.renameLimit
870 diff.renames
871 fetch.unpackLimit
872 format.headers
873 gitcvs.enabled
874 gitcvs.logfile
875 gitcvs.allbinary
876 gitcvs.dbname gitcvs.dbdriver gitcvs.dbuser gitcvs.dvpass
877 gc.packrefs
878 gc.reflogexpire
879 gc.reflogexpireunreachable
880 gc.rerereresolved
881 gc.rerereunresolved
882 http.sslVerify
883 http.sslCert
884 http.sslKey
885 http.sslCAInfo
886 http.sslCAPath
887 http.maxRequests
888 http.lowSpeedLimit
889 http.lowSpeedTime
890 http.noEPSV
891 i18n.commitEncoding
892 i18n.logOutputEncoding
893 log.showroot
894 merge.tool
895 merge.summary
896 merge.verbosity
897 pack.window
898 pack.depth
899 pull.octopus
900 pull.twohead
901 repack.useDeltaBaseOffset
902 show.difftree
903 showbranch.default
904 tar.umask
905 transfer.unpackLimit
906 receive.unpackLimit
907 receive.denyNonFastForwards
908 user.name
909 user.email
910 user.signingkey
911 whatchanged.difftree
912 branch. remote.
916 _git_remote ()
918 local i c=1 command
919 while [ $c -lt $COMP_CWORD ]; do
920 i="${COMP_WORDS[c]}"
921 case "$i" in
922 add|show|prune|update) command="$i"; break ;;
923 esac
924 c=$((++c))
925 done
927 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
928 __gitcomp "add show prune update"
929 return
932 case "$command" in
933 show|prune)
934 __gitcomp "$(__git_remotes)"
936 update)
937 local i c='' IFS=$'\n'
938 for i in $(git --git-dir="$(__gitdir)" config --list); do
939 case "$i" in
940 remotes.*)
941 i="${i#remotes.}"
942 c="$c ${i/=*/}"
944 esac
945 done
946 __gitcomp "$c"
949 COMPREPLY=()
951 esac
954 _git_reset ()
956 local cur="${COMP_WORDS[COMP_CWORD]}"
957 case "$cur" in
958 --*)
959 __gitcomp "--mixed --hard --soft"
960 return
962 esac
963 __gitcomp "$(__git_refs)"
966 _git_shortlog ()
968 local cur="${COMP_WORDS[COMP_CWORD]}"
969 case "$cur" in
970 --*)
971 __gitcomp "
972 --max-count= --max-age= --since= --after=
973 --min-age= --before= --until=
974 --no-merges
975 --author= --committer= --grep=
976 --all-match
977 --not --all
978 --numbered --summary
980 return
982 esac
983 __git_complete_revlist
986 _git_show ()
988 local cur="${COMP_WORDS[COMP_CWORD]}"
989 case "$cur" in
990 --pretty=*)
991 __gitcomp "
992 oneline short medium full fuller email raw
993 " "" "${cur##--pretty=}"
994 return
996 --*)
997 __gitcomp "--pretty="
998 return
1000 esac
1001 __git_complete_file
1004 _git_stash ()
1006 __gitcomp 'list show apply clear'
1009 _git ()
1011 local i c=1 command __git_dir
1013 while [ $c -lt $COMP_CWORD ]; do
1014 i="${COMP_WORDS[c]}"
1015 case "$i" in
1016 --git-dir=*) __git_dir="${i#--git-dir=}" ;;
1017 --bare) __git_dir="." ;;
1018 --version|--help|-p|--paginate) ;;
1019 *) command="$i"; break ;;
1020 esac
1021 c=$((++c))
1022 done
1024 if [ $c -eq $COMP_CWORD -a -z "$command" ]; then
1025 case "${COMP_WORDS[COMP_CWORD]}" in
1026 --*=*) COMPREPLY=() ;;
1027 --*) __gitcomp "--git-dir= --bare --version --exec-path" ;;
1028 *) __gitcomp "$(__git_commands) $(__git_aliases)" ;;
1029 esac
1030 return
1033 local expansion=$(__git_aliased_command "$command")
1034 [ "$expansion" ] && command="$expansion"
1036 case "$command" in
1037 am) _git_am ;;
1038 add) _git_add ;;
1039 apply) _git_apply ;;
1040 bisect) _git_bisect ;;
1041 bundle) _git_bundle ;;
1042 branch) _git_branch ;;
1043 checkout) _git_checkout ;;
1044 cherry) _git_cherry ;;
1045 cherry-pick) _git_cherry_pick ;;
1046 commit) _git_commit ;;
1047 config) _git_config ;;
1048 diff) _git_diff ;;
1049 fetch) _git_fetch ;;
1050 format-patch) _git_format_patch ;;
1051 gc) _git_gc ;;
1052 log) _git_log ;;
1053 ls-remote) _git_ls_remote ;;
1054 ls-tree) _git_ls_tree ;;
1055 merge) _git_merge;;
1056 merge-base) _git_merge_base ;;
1057 name-rev) _git_name_rev ;;
1058 pull) _git_pull ;;
1059 push) _git_push ;;
1060 rebase) _git_rebase ;;
1061 remote) _git_remote ;;
1062 reset) _git_reset ;;
1063 shortlog) _git_shortlog ;;
1064 show) _git_show ;;
1065 show-branch) _git_log ;;
1066 stash) _git_stash ;;
1067 whatchanged) _git_log ;;
1068 *) COMPREPLY=() ;;
1069 esac
1072 _gitk ()
1074 local cur="${COMP_WORDS[COMP_CWORD]}"
1075 case "$cur" in
1076 --*)
1077 __gitcomp "--not --all"
1078 return
1080 esac
1081 __git_complete_revlist
1084 complete -o default -o nospace -F _git git
1085 complete -o default -o nospace -F _gitk gitk
1086 complete -o default -o nospace -F _git_am git-am
1087 complete -o default -o nospace -F _git_apply git-apply
1088 complete -o default -o nospace -F _git_bisect git-bisect
1089 complete -o default -o nospace -F _git_branch git-branch
1090 complete -o default -o nospace -F _git_bundle git-bundle
1091 complete -o default -o nospace -F _git_checkout git-checkout
1092 complete -o default -o nospace -F _git_cherry git-cherry
1093 complete -o default -o nospace -F _git_cherry_pick git-cherry-pick
1094 complete -o default -o nospace -F _git_commit git-commit
1095 complete -o default -o nospace -F _git_diff git-diff
1096 complete -o default -o nospace -F _git_fetch git-fetch
1097 complete -o default -o nospace -F _git_format_patch git-format-patch
1098 complete -o default -o nospace -F _git_gc git-gc
1099 complete -o default -o nospace -F _git_log git-log
1100 complete -o default -o nospace -F _git_ls_remote git-ls-remote
1101 complete -o default -o nospace -F _git_ls_tree git-ls-tree
1102 complete -o default -o nospace -F _git_merge git-merge
1103 complete -o default -o nospace -F _git_merge_base git-merge-base
1104 complete -o default -o nospace -F _git_name_rev git-name-rev
1105 complete -o default -o nospace -F _git_pull git-pull
1106 complete -o default -o nospace -F _git_push git-push
1107 complete -o default -o nospace -F _git_rebase git-rebase
1108 complete -o default -o nospace -F _git_config git-config
1109 complete -o default -o nospace -F _git_remote git-remote
1110 complete -o default -o nospace -F _git_reset git-reset
1111 complete -o default -o nospace -F _git_shortlog git-shortlog
1112 complete -o default -o nospace -F _git_show git-show
1113 complete -o default -o nospace -F _git_stash git-stash
1114 complete -o default -o nospace -F _git_log git-show-branch
1115 complete -o default -o nospace -F _git_log git-whatchanged
1117 # The following are necessary only for Cygwin, and only are needed
1118 # when the user has tab-completed the executable name and consequently
1119 # included the '.exe' suffix.
1121 if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then
1122 complete -o default -o nospace -F _git_add git-add.exe
1123 complete -o default -o nospace -F _git_apply git-apply.exe
1124 complete -o default -o nospace -F _git git.exe
1125 complete -o default -o nospace -F _git_branch git-branch.exe
1126 complete -o default -o nospace -F _git_bundle git-bundle.exe
1127 complete -o default -o nospace -F _git_cherry git-cherry.exe
1128 complete -o default -o nospace -F _git_diff git-diff.exe
1129 complete -o default -o nospace -F _git_format_patch git-format-patch.exe
1130 complete -o default -o nospace -F _git_log git-log.exe
1131 complete -o default -o nospace -F _git_ls_tree git-ls-tree.exe
1132 complete -o default -o nospace -F _git_merge_base git-merge-base.exe
1133 complete -o default -o nospace -F _git_name_rev git-name-rev.exe
1134 complete -o default -o nospace -F _git_push git-push.exe
1135 complete -o default -o nospace -F _git_config git-config
1136 complete -o default -o nospace -F _git_shortlog git-shortlog.exe
1137 complete -o default -o nospace -F _git_show git-show.exe
1138 complete -o default -o nospace -F _git_log git-show-branch.exe
1139 complete -o default -o nospace -F _git_log git-whatchanged.exe