Created
October 16, 2012 04:23
-
-
Save wylkon/3897220 to your computer and use it in GitHub Desktop.
git_completion
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| _git_push () | |
| { | |
| local cur prev | |
| _get_comp_words_by_ref -n =: cur prev | |
| case "$prev" in | |
| --repo) | |
| __gitcomp "$(__git_remotes)" | |
| return | |
| esac | |
| case "$cur" in | |
| --repo=*) | |
| __gitcomp "$(__git_remotes)" "" "${cur##--repo=}" | |
| return | |
| ;; | |
| --*) | |
| __gitcomp " | |
| --all --mirror --tags --dry-run --force --verbose | |
| --receive-pack= --repo= | |
| " | |
| return | |
| ;; | |
| esac | |
| __git_complete_remote_or_refspec | |
| } | |
| _git_rebase () | |
| { | |
| local dir="$(__gitdir)" | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| if [ -d "$dir"/rebase-apply ] || [ -d "$dir"/rebase-merge ]; then | |
| __gitcomp "--continue --skip --abort" | |
| return | |
| fi | |
| __git_complete_strategy && return | |
| case "$cur" in | |
| --whitespace=*) | |
| __gitcomp "$__git_whitespacelist" "" "${cur##--whitespace=}" | |
| return | |
| ;; | |
| --*) | |
| __gitcomp " | |
| --onto --merge --strategy --interactive | |
| --preserve-merges --stat --no-stat | |
| --committer-date-is-author-date --ignore-date | |
| --ignore-whitespace --whitespace= | |
| --autosquash | |
| " | |
| return | |
| esac | |
| __gitcomp "$(__git_refs)" | |
| } | |
| _git_reflog () | |
| { | |
| local subcommands="show delete expire" | |
| local subcommand="$(__git_find_on_cmdline "$subcommands")" | |
| if [ -z "$subcommand" ]; then | |
| __gitcomp "$subcommands" | |
| else | |
| __gitcomp "$(__git_refs)" | |
| fi | |
| } | |
| __git_send_email_confirm_options="always never auto cc compose" | |
| __git_send_email_suppresscc_options="author self cc bodycc sob cccmd body all" | |
| _git_send_email () | |
| { | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --confirm=*) | |
| __gitcomp " | |
| $__git_send_email_confirm_options | |
| " "" "${cur##--confirm=}" | |
| return | |
| ;; | |
| --suppress-cc=*) | |
| __gitcomp " | |
| $__git_send_email_suppresscc_options | |
| " "" "${cur##--suppress-cc=}" | |
| return | |
| ;; | |
| --smtp-encryption=*) | |
| __gitcomp "ssl tls" "" "${cur##--smtp-encryption=}" | |
| return | |
| ;; | |
| --*) | |
| __gitcomp "--annotate --bcc --cc --cc-cmd --chain-reply-to | |
| --compose --confirm= --dry-run --envelope-sender | |
| --from --identity | |
| --in-reply-to --no-chain-reply-to --no-signed-off-by-cc | |
| --no-suppress-from --no-thread --quiet | |
| --signed-off-by-cc --smtp-pass --smtp-server | |
| --smtp-server-port --smtp-encryption= --smtp-user | |
| --subject --suppress-cc= --suppress-from --thread --to | |
| --validate --no-validate" | |
| return | |
| ;; | |
| esac | |
| COMPREPLY=() | |
| } | |
| _git_stage () | |
| { | |
| _git_add | |
| } | |
| __git_config_get_set_variables () | |
| { | |
| local words cword | |
| _get_comp_words_by_ref -n =: words cword | |
| local prevword word config_file= c=$cword | |
| while [ $c -gt 1 ]; do | |
| word="${words[c]}" | |
| case "$word" in | |
| --global|--system|--file=*) | |
| config_file="$word" | |
| break | |
| ;; | |
| -f|--file) | |
| config_file="$word $prevword" | |
| break | |
| ;; | |
| esac | |
| prevword=$word | |
| c=$((--c)) | |
| done | |
| git --git-dir="$(__gitdir)" config $config_file --list 2>/dev/null | | |
| while read line | |
| do | |
| case "$line" in | |
| *.*=*) | |
| echo "${line/=*/}" | |
| ;; | |
| esac | |
| done | |
| } | |
| _git_config () | |
| { | |
| local cur prev | |
| _get_comp_words_by_ref -n =: cur prev | |
| case "$prev" in | |
| branch.*.remote) | |
| __gitcomp "$(__git_remotes)" | |
| return | |
| ;; | |
| branch.*.merge) | |
| __gitcomp "$(__git_refs)" | |
| return | |
| ;; | |
| remote.*.fetch) | |
| local remote="${prev#remote.}" | |
| remote="${remote%.fetch}" | |
| __gitcomp "$(__git_refs_remotes "$remote")" | |
| return | |
| ;; | |
| remote.*.push) | |
| local remote="${prev#remote.}" | |
| remote="${remote%.push}" | |
| __gitcomp "$(git --git-dir="$(__gitdir)" \ | |
| for-each-ref --format='%(refname):%(refname)' \ | |
| refs/heads)" | |
| return | |
| ;; | |
| pull.twohead|pull.octopus) | |
| __git_compute_merge_strategies | |
| __gitcomp "$__git_merge_strategies" | |
| return | |
| ;; | |
| color.branch|color.diff|color.interactive|\ | |
| color.showbranch|color.status|color.ui) | |
| __gitcomp "always never auto" | |
| return | |
| ;; | |
| color.pager) | |
| __gitcomp "false true" | |
| return | |
| ;; | |
| color.*.*) | |
| __gitcomp " | |
| normal black red green yellow blue magenta cyan white | |
| bold dim ul blink reverse | |
| " | |
| return | |
| ;; | |
| help.format) | |
| __gitcomp "man info web html" | |
| return | |
| ;; | |
| log.date) | |
| __gitcomp "$__git_log_date_formats" | |
| return | |
| ;; | |
| sendemail.aliasesfiletype) | |
| __gitcomp "mutt mailrc pine elm gnus" | |
| return | |
| ;; | |
| sendemail.confirm) | |
| __gitcomp "$__git_send_email_confirm_options" | |
| return | |
| ;; | |
| sendemail.suppresscc) | |
| __gitcomp "$__git_send_email_suppresscc_options" | |
| return | |
| ;; | |
| --get|--get-all|--unset|--unset-all) | |
| __gitcomp "$(__git_config_get_set_variables)" | |
| return | |
| ;; | |
| *.*) | |
| COMPREPLY=() | |
| return | |
| ;; | |
| esac | |
| case "$cur" in | |
| --*) | |
| __gitcomp " | |
| --global --system --file= | |
| --list --replace-all | |
| --get --get-all --get-regexp | |
| --add --unset --unset-all | |
| --remove-section --rename-section | |
| " | |
| return | |
| ;; | |
| branch.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp "remote merge mergeoptions rebase" "$pfx" "$cur" | |
| return | |
| ;; | |
| branch.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur#*.}" | |
| __gitcomp "$(__git_heads)" "$pfx" "$cur" "." | |
| return | |
| ;; | |
| guitool.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp " | |
| argprompt cmd confirm needsfile noconsole norescan | |
| prompt revprompt revunmerged title | |
| " "$pfx" "$cur" | |
| return | |
| ;; | |
| difftool.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp "cmd path" "$pfx" "$cur" | |
| return | |
| ;; | |
| man.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp "cmd path" "$pfx" "$cur" | |
| return | |
| ;; | |
| mergetool.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp "cmd path trustExitCode" "$pfx" "$cur" | |
| return | |
| ;; | |
| pager.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur#*.}" | |
| __git_compute_all_commands | |
| __gitcomp "$__git_all_commands" "$pfx" "$cur" | |
| return | |
| ;; | |
| remote.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp " | |
| url proxy fetch push mirror skipDefaultUpdate | |
| receivepack uploadpack tagopt pushurl | |
| " "$pfx" "$cur" | |
| return | |
| ;; | |
| remote.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur#*.}" | |
| __gitcomp "$(__git_remotes)" "$pfx" "$cur" "." | |
| return | |
| ;; | |
| url.*.*) | |
| local pfx="${cur%.*}." | |
| cur="${cur##*.}" | |
| __gitcomp "insteadOf pushInsteadOf" "$pfx" "$cur" | |
| return | |
| ;; | |
| esac | |
| __gitcomp " | |
| add.ignoreErrors | |
| advice.commitBeforeMerge | |
| advice.detachedHead | |
| advice.implicitIdentity | |
| advice.pushNonFastForward | |
| advice.resolveConflict | |
| advice.statusHints | |
| alias. | |
| am.keepcr | |
| apply.ignorewhitespace | |
| apply.whitespace | |
| branch.autosetupmerge | |
| branch.autosetuprebase | |
| browser. | |
| clean.requireForce | |
| color.branch | |
| color.branch.current | |
| color.branch.local | |
| color.branch.plain | |
| color.branch.remote | |
| color.decorate.HEAD | |
| color.decorate.branch | |
| color.decorate.remoteBranch | |
| color.decorate.stash | |
| color.decorate.tag | |
| color.diff | |
| color.diff.commit | |
| color.diff.frag | |
| color.diff.func | |
| color.diff.meta | |
| color.diff.new | |
| color.diff.old | |
| color.diff.plain | |
| color.diff.whitespace | |
| color.grep | |
| color.grep.context | |
| color.grep.filename | |
| color.grep.function | |
| color.grep.linenumber | |
| color.grep.match | |
| color.grep.selected | |
| color.grep.separator | |
| color.interactive | |
| color.interactive.error | |
| color.interactive.header | |
| color.interactive.help | |
| color.interactive.prompt | |
| color.pager | |
| color.showbranch | |
| color.status | |
| color.status.added | |
| color.status.changed | |
| color.status.header | |
| color.status.nobranch | |
| color.status.untracked | |
| color.status.updated | |
| color.ui | |
| commit.status | |
| commit.template | |
| core.abbrevguard | |
| core.askpass | |
| core.attributesfile | |
| core.autocrlf | |
| core.bare | |
| core.bigFileThreshold | |
| core.compression | |
| core.createObject | |
| core.deltaBaseCacheLimit | |
| core.editor | |
| core.eol | |
| core.excludesfile | |
| core.fileMode | |
| core.fsyncobjectfiles | |
| core.gitProxy | |
| core.ignoreCygwinFSTricks | |
| core.ignoreStat | |
| core.ignorecase | |
| core.logAllRefUpdates | |
| core.loosecompression | |
| core.notesRef | |
| core.packedGitLimit | |
| core.packedGitWindowSize | |
| core.pager | |
| core.preferSymlinkRefs | |
| core.preloadindex | |
| core.quotepath | |
| core.repositoryFormatVersion | |
| core.safecrlf | |
| core.sharedRepository | |
| core.sparseCheckout | |
| core.symlinks | |
| core.trustctime | |
| core.warnAmbiguousRefs | |
| core.whitespace | |
| core.worktree | |
| diff.autorefreshindex | |
| diff.external | |
| diff.ignoreSubmodules | |
| diff.mnemonicprefix | |
| diff.noprefix | |
| diff.renameLimit | |
| diff.renames | |
| diff.suppressBlankEmpty | |
| diff.tool | |
| diff.wordRegex | |
| difftool. | |
| difftool.prompt | |
| fetch.recurseSubmodules | |
| fetch.unpackLimit | |
| format.attach | |
| format.cc | |
| format.headers | |
| format.numbered | |
| format.pretty | |
| format.signature | |
| format.signoff | |
| format.subjectprefix | |
| format.suffix | |
| format.thread | |
| format.to | |
| gc. | |
| gc.aggressiveWindow | |
| gc.auto | |
| gc.autopacklimit | |
| gc.packrefs | |
| gc.pruneexpire | |
| gc.reflogexpire | |
| gc.reflogexpireunreachable | |
| gc.rerereresolved | |
| gc.rerereunresolved | |
| gitcvs.allbinary | |
| gitcvs.commitmsgannotation | |
| gitcvs.dbTableNamePrefix | |
| gitcvs.dbdriver | |
| gitcvs.dbname | |
| gitcvs.dbpass | |
| gitcvs.dbuser | |
| gitcvs.enabled | |
| gitcvs.logfile | |
| gitcvs.usecrlfattr | |
| guitool. | |
| gui.blamehistoryctx | |
| gui.commitmsgwidth | |
| gui.copyblamethreshold | |
| gui.diffcontext | |
| gui.encoding | |
| gui.fastcopyblame | |
| gui.matchtrackingbranch | |
| gui.newbranchtemplate | |
| gui.pruneduringfetch | |
| gui.spellingdictionary | |
| gui.trustmtime | |
| help.autocorrect | |
| help.browser | |
| help.format | |
| http.lowSpeedLimit | |
| http.lowSpeedTime | |
| http.maxRequests | |
| http.minSessions | |
| http.noEPSV | |
| http.postBuffer | |
| http.proxy | |
| http.sslCAInfo | |
| http.sslCAPath | |
| http.sslCert | |
| http.sslCertPasswordProtected | |
| http.sslKey | |
| http.sslVerify | |
| http.useragent | |
| i18n.commitEncoding | |
| i18n.logOutputEncoding | |
| imap.authMethod | |
| imap.folder | |
| imap.host | |
| imap.pass | |
| imap.port | |
| imap.preformattedHTML | |
| imap.sslverify | |
| imap.tunnel | |
| imap.user | |
| init.templatedir | |
| instaweb.browser | |
| instaweb.httpd | |
| instaweb.local | |
| instaweb.modulepath | |
| instaweb.port | |
| interactive.singlekey | |
| log.date | |
| log.decorate | |
| log.showroot | |
| mailmap.file | |
| man. | |
| man.viewer | |
| merge. | |
| merge.conflictstyle | |
| merge.log | |
| merge.renameLimit | |
| merge.renormalize | |
| merge.stat | |
| merge.tool | |
| merge.verbosity | |
| mergetool. | |
| mergetool.keepBackup | |
| mergetool.keepTemporaries | |
| mergetool.prompt | |
| notes.displayRef | |
| notes.rewrite. | |
| notes.rewrite.amend | |
| notes.rewrite.rebase | |
| notes.rewriteMode | |
| notes.rewriteRef | |
| pack.compression | |
| pack.deltaCacheLimit | |
| pack.deltaCacheSize | |
| pack.depth | |
| pack.indexVersion | |
| pack.packSizeLimit | |
| pack.threads | |
| pack.window | |
| pack.windowMemory | |
| pager. | |
| pretty. | |
| pull.octopus | |
| pull.twohead | |
| push.default | |
| rebase.autosquash | |
| rebase.stat | |
| receive.autogc | |
| receive.denyCurrentBranch | |
| receive.denyDeleteCurrent | |
| receive.denyDeletes | |
| receive.denyNonFastForwards | |
| receive.fsckObjects | |
| receive.unpackLimit | |
| receive.updateserverinfo | |
| remotes. | |
| repack.usedeltabaseoffset | |
| rerere.autoupdate | |
| rerere.enabled | |
| sendemail. | |
| sendemail.aliasesfile | |
| sendemail.aliasfiletype | |
| sendemail.bcc | |
| sendemail.cc | |
| sendemail.cccmd | |
| sendemail.chainreplyto | |
| sendemail.confirm | |
| sendemail.envelopesender | |
| sendemail.from | |
| sendemail.identity | |
| sendemail.multiedit | |
| sendemail.signedoffbycc | |
| sendemail.smtpdomain | |
| sendemail.smtpencryption | |
| sendemail.smtppass | |
| sendemail.smtpserver | |
| sendemail.smtpserveroption | |
| sendemail.smtpserverport | |
| sendemail.smtpuser | |
| sendemail.suppresscc | |
| sendemail.suppressfrom | |
| sendemail.thread | |
| sendemail.to | |
| sendemail.validate | |
| showbranch.default | |
| status.relativePaths | |
| status.showUntrackedFiles | |
| status.submodulesummary | |
| submodule. | |
| tar.umask | |
| transfer.unpackLimit | |
| url. | |
| user.email | |
| user.name | |
| user.signingkey | |
| web.browser | |
| branch. remote. | |
| " | |
| } | |
| _git_remote () | |
| { | |
| local subcommands="add rename rm show prune update set-head" | |
| local subcommand="$(__git_find_on_cmdline "$subcommands")" | |
| if [ -z "$subcommand" ]; then | |
| __gitcomp "$subcommands" | |
| return | |
| fi | |
| case "$subcommand" in | |
| rename|rm|show|prune) | |
| __gitcomp "$(__git_remotes)" | |
| ;; | |
| update) | |
| local i c='' IFS=$'\n' | |
| for i in $(git --git-dir="$(__gitdir)" config --get-regexp "remotes\..*" 2>/dev/null); do | |
| i="${i#remotes.}" | |
| c="$c ${i/ */}" | |
| done | |
| __gitcomp "$c" | |
| ;; | |
| *) | |
| COMPREPLY=() | |
| ;; | |
| esac | |
| } | |
| _git_replace () | |
| { | |
| __gitcomp "$(__git_refs)" | |
| } | |
| _git_reset () | |
| { | |
| __git_has_doubledash && return | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp "--merge --mixed --hard --soft --patch" | |
| return | |
| ;; | |
| esac | |
| __gitcomp "$(__git_refs)" | |
| } | |
| _git_revert () | |
| { | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp "--edit --mainline --no-edit --no-commit --signoff" | |
| return | |
| ;; | |
| esac | |
| __gitcomp "$(__git_refs)" | |
| } | |
| _git_rm () | |
| { | |
| __git_has_doubledash && return | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp "--cached --dry-run --ignore-unmatch --quiet" | |
| return | |
| ;; | |
| esac | |
| COMPREPLY=() | |
| } | |
| _git_shortlog () | |
| { | |
| __git_has_doubledash && return | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp " | |
| $__git_log_common_options | |
| $__git_log_shortlog_options | |
| --numbered --summary | |
| " | |
| return | |
| ;; | |
| esac | |
| __git_complete_revlist | |
| } | |
| _git_show () | |
| { | |
| __git_has_doubledash && return | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --pretty=*) | |
| __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases) | |
| " "" "${cur##--pretty=}" | |
| return | |
| ;; | |
| --format=*) | |
| __gitcomp "$__git_log_pretty_formats $(__git_pretty_aliases) | |
| " "" "${cur##--format=}" | |
| return | |
| ;; | |
| --*) | |
| __gitcomp "--pretty= --format= --abbrev-commit --oneline | |
| $__git_diff_common_options | |
| " | |
| return | |
| ;; | |
| esac | |
| __git_complete_file | |
| } | |
| _git_show_branch () | |
| { | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp " | |
| --all --remotes --topo-order --current --more= | |
| --list --independent --merge-base --no-name | |
| --color --no-color | |
| --sha1-name --sparse --topics --reflog | |
| " | |
| return | |
| ;; | |
| esac | |
| __git_complete_revlist | |
| } | |
| _git_stash () | |
| { | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| local save_opts='--keep-index --no-keep-index --quiet --patch' | |
| local subcommands='save list show apply clear drop pop create branch' | |
| local subcommand="$(__git_find_on_cmdline "$subcommands")" | |
| if [ -z "$subcommand" ]; then | |
| case "$cur" in | |
| --*) | |
| __gitcomp "$save_opts" | |
| ;; | |
| *) | |
| if [ -z "$(__git_find_on_cmdline "$save_opts")" ]; then | |
| __gitcomp "$subcommands" | |
| else | |
| COMPREPLY=() | |
| fi | |
| ;; | |
| esac | |
| else | |
| case "$subcommand,$cur" in | |
| save,--*) | |
| __gitcomp "$save_opts" | |
| ;; | |
| apply,--*|pop,--*) | |
| __gitcomp "--index --quiet" | |
| ;; | |
| show,--*|drop,--*|branch,--*) | |
| COMPREPLY=() | |
| ;; | |
| show,*|apply,*|drop,*|pop,*|branch,*) | |
| __gitcomp "$(git --git-dir="$(__gitdir)" stash list \ | |
| | sed -n -e 's/:.*//p')" | |
| ;; | |
| *) | |
| COMPREPLY=() | |
| ;; | |
| esac | |
| fi | |
| } | |
| _git_submodule () | |
| { | |
| __git_has_doubledash && return | |
| local subcommands="add status init update summary foreach sync" | |
| if [ -z "$(__git_find_on_cmdline "$subcommands")" ]; then | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp "--quiet --cached" | |
| ;; | |
| *) | |
| __gitcomp "$subcommands" | |
| ;; | |
| esac | |
| return | |
| fi | |
| } | |
| _git_svn () | |
| { | |
| local subcommands=" | |
| init fetch clone rebase dcommit log find-rev | |
| set-tree commit-diff info create-ignore propget | |
| proplist show-ignore show-externals branch tag blame | |
| migrate mkdirs reset gc | |
| " | |
| local subcommand="$(__git_find_on_cmdline "$subcommands")" | |
| if [ -z "$subcommand" ]; then | |
| __gitcomp "$subcommands" | |
| else | |
| local remote_opts="--username= --config-dir= --no-auth-cache" | |
| local fc_opts=" | |
| --follow-parent --authors-file= --repack= | |
| --no-metadata --use-svm-props --use-svnsync-props | |
| --log-window-size= --no-checkout --quiet | |
| --repack-flags --use-log-author --localtime | |
| --ignore-paths= $remote_opts | |
| " | |
| local init_opts=" | |
| --template= --shared= --trunk= --tags= | |
| --branches= --stdlayout --minimize-url | |
| --no-metadata --use-svm-props --use-svnsync-props | |
| --rewrite-root= --prefix= --use-log-author | |
| --add-author-from $remote_opts | |
| " | |
| local cmt_opts=" | |
| --edit --rmdir --find-copies-harder --copy-similarity= | |
| " | |
| local cur | |
| _get_comp_words_by_ref -n =: cur | |
| case "$subcommand,$cur" in | |
| fetch,--*) | |
| __gitcomp "--revision= --fetch-all $fc_opts" | |
| ;; | |
| clone,--*) | |
| __gitcomp "--revision= $fc_opts $init_opts" | |
| ;; | |
| init,--*) | |
| __gitcomp "$init_opts" | |
| ;; | |
| dcommit,--*) | |
| __gitcomp " | |
| --merge --strategy= --verbose --dry-run | |
| --fetch-all --no-rebase --commit-url | |
| --revision $cmt_opts $fc_opts | |
| " | |
| ;; | |
| set-tree,--*) | |
| __gitcomp "--stdin $cmt_opts $fc_opts" | |
| ;; | |
| create-ignore,--*|propget,--*|proplist,--*|show-ignore,--*|\ | |
| show-externals,--*|mkdirs,--*) | |
| __gitcomp "--revision=" | |
| ;; | |
| log,--*) | |
| __gitcomp " | |
| --limit= --revision= --verbose --incremental | |
| --oneline --show-commit --non-recursive | |
| --authors-file= --color | |
| " | |
| ;; | |
| rebase,--*) | |
| __gitcomp " | |
| --merge --verbose --strategy= --local | |
| --fetch-all --dry-run $fc_opts | |
| " | |
| ;; | |
| commit-diff,--*) | |
| __gitcomp "--message= --file= --revision= $cmt_opts" | |
| ;; | |
| info,--*) | |
| __gitcomp "--url" | |
| ;; | |
| branch,--*) | |
| __gitcomp "--dry-run --message --tag" | |
| ;; | |
| tag,--*) | |
| __gitcomp "--dry-run --message" | |
| ;; | |
| blame,--*) | |
| __gitcomp "--git-format" | |
| ;; | |
| migrate,--*) | |
| __gitcomp " | |
| --config-dir= --ignore-paths= --minimize | |
| --no-auth-cache --username= | |
| " | |
| ;; | |
| reset,--*) | |
| __gitcomp "--revision= --parent" | |
| ;; | |
| *) | |
| COMPREPLY=() | |
| ;; | |
| esac | |
| fi | |
| } | |
| _git_tag () | |
| { | |
| local i c=1 f=0 | |
| local words cword prev | |
| _get_comp_words_by_ref -n =: words cword prev | |
| while [ $c -lt $cword ]; do | |
| i="${words[c]}" | |
| case "$i" in | |
| -d|-v) | |
| __gitcomp "$(__git_tags)" | |
| return | |
| ;; | |
| -f) | |
| f=1 | |
| ;; | |
| esac | |
| c=$((++c)) | |
| done | |
| case "$prev" in | |
| -m|-F) | |
| COMPREPLY=() | |
| ;; | |
| -*|tag) | |
| if [ $f = 1 ]; then | |
| __gitcomp "$(__git_tags)" | |
| else | |
| COMPREPLY=() | |
| fi | |
| ;; | |
| *) | |
| __gitcomp "$(__git_refs)" | |
| ;; | |
| esac | |
| } | |
| _git_whatchanged () | |
| { | |
| _git_log | |
| } | |
| _git () | |
| { | |
| local i c=1 command __git_dir | |
| if [[ -n ${ZSH_VERSION-} ]]; then | |
| emulate -L bash | |
| setopt KSH_TYPESET | |
| fi | |
| local cur words cword | |
| _get_comp_words_by_ref -n =: cur words cword | |
| while [ $c -lt $cword ]; do | |
| i="${words[c]}" | |
| case "$i" in | |
| --git-dir=*) __git_dir="${i#--git-dir=}" ;; | |
| --bare) __git_dir="." ;; | |
| --version|-p|--paginate) ;; | |
| --help) command="help"; break ;; | |
| *) command="$i"; break ;; | |
| esac | |
| c=$((++c)) | |
| done | |
| if [ -z "$command" ]; then | |
| case "$cur" in | |
| --*) __gitcomp " | |
| --paginate | |
| --no-pager | |
| --git-dir= | |
| --bare | |
| --version | |
| --exec-path | |
| --html-path | |
| --work-tree= | |
| --help | |
| " | |
| ;; | |
| *) __git_compute_porcelain_commands | |
| __gitcomp "$__git_porcelain_commands $(__git_aliases)" ;; | |
| esac | |
| return | |
| fi | |
| local completion_func="_git_${command//-/_}" | |
| declare -f $completion_func >/dev/null && $completion_func && return | |
| local expansion=$(__git_aliased_command "$command") | |
| if [ -n "$expansion" ]; then | |
| completion_func="_git_${expansion//-/_}" | |
| declare -f $completion_func >/dev/null && $completion_func | |
| fi | |
| } | |
| _gitk () | |
| { | |
| if [[ -n ${ZSH_VERSION-} ]]; then | |
| emulate -L bash | |
| setopt KSH_TYPESET | |
| fi | |
| __git_has_doubledash && return | |
| local cur | |
| local g="$(__gitdir)" | |
| local merge="" | |
| if [ -f "$g/MERGE_HEAD" ]; then | |
| merge="--merge" | |
| fi | |
| _get_comp_words_by_ref -n =: cur | |
| case "$cur" in | |
| --*) | |
| __gitcomp " | |
| $__git_log_common_options | |
| $__git_log_gitk_options | |
| $merge | |
| " | |
| return | |
| ;; | |
| esac | |
| __git_complete_revlist | |
| } | |
| complete -o bashdefault -o default -o nospace -F _git git 2>/dev/null \ | |
| || complete -o default -o nospace -F _git git | |
| complete -o bashdefault -o default -o nospace -F _gitk gitk 2>/dev/null \ | |
| || complete -o default -o nospace -F _gitk gitk | |
| # The following are necessary only for Cygwin, and only are needed | |
| # when the user has tab-completed the executable name and consequently | |
| # included the '.exe' suffix. | |
| # | |
| if [ Cygwin = "$(uname -o 2>/dev/null)" ]; then | |
| complete -o bashdefault -o default -o nospace -F _git git.exe 2>/dev/null \ | |
| || complete -o default -o nospace -F _git git.exe | |
| fi | |
| if [[ -n ${ZSH_VERSION-} ]]; then | |
| shopt () { | |
| local option | |
| if [ $# -ne 2 ]; then | |
| echo "USAGE: $0 (-q|-s|-u) <option>" >&2 | |
| return 1 | |
| fi | |
| case "$2" in | |
| nullglob) | |
| option="$2" | |
| ;; | |
| *) | |
| echo "$0: invalid option: $2" >&2 | |
| return 1 | |
| esac | |
| case "$1" in | |
| -q) setopt | grep -q "$option" ;; | |
| -u) unsetopt "$option" ;; | |
| -s) setopt "$option" ;; | |
| *) | |
| echo "$0: invalid flag: $1" >&2 | |
| return 1 | |
| esac | |
| } | |
| fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment