From 4b5b1563a8f8705ba4ee81b7b0e7ae9aa9365c6d Mon Sep 17 00:00:00 2001 From: Oliver Kiddle Date: Fri, 19 Jul 2019 01:40:09 +0200 Subject: 44551: update for new git changes --- Completion/Unix/Command/_git | 202 +++++++++++++++++++++++++++++++++++-------- 1 file changed, 165 insertions(+), 37 deletions(-) (limited to 'Completion') diff --git a/Completion/Unix/Command/_git b/Completion/Unix/Command/_git index 112098d3a..8b5c86642 100644 --- a/Completion/Unix/Command/_git +++ b/Completion/Unix/Command/_git @@ -294,9 +294,9 @@ _git-bisect () { _git-branch () { declare l c m d e - l='--color --no-color -r --remotes -a -v --verbose --abbrev --no-abbrev --list --points-at --sort' + l='--color --no-color -r --remotes -a -v --verbose --abbrev --no-abbrev -l --list --points-at --sort' c='--create-reflog -f --force -t --track --no-track -u --set-upstream --set-upstream-to --unset-upstream --contains --no-contains --merged --no-merged' - m='-c --copy -C -m --move -M --edit-description' + m='-c --copy -C -m --move -M --edit-description --show-current' d='-d --delete -D' declare -a dependent_creation_args @@ -331,12 +331,13 @@ _git-branch () { "($c $m $d : --color)--no-color[turn off branch coloring]" \ "($c $m $d --no-column)"'--column=[display tag listing in columns]:column.branch option:((always\:"always show in columns" never\:"never show in columns" auto\:"show in columns if the output is to the terminal" column\:"fill columns before rows (default)" row\:"fill rows before columns" plain\:"show in one column" dense\:"make unequal size columns to utilize more space" nodense\:"make equal size columns"))' \ "($c $m $d --column)--no-column[don't display in columns]" \ - "($c $m $d )*--list[list only branches matching glob]:pattern" \ + "($c $m $d)*"{-l,--list}'[list only branches matching glob]:pattern' \ "($c $m -a)"{-r,--remotes}'[list or delete only remote-tracking branches]' \ "($c $m $d : -r --remotes)-a[list both remote-tracking branches and local branches]" \ "($c $m $d : -v -vv --verbose)"{-v,-vv,--verbose}'[show SHA1 and commit subject line for each head]' \ "($c $m $d :)--abbrev=[set minimum SHA1 display-length]: :__git_guard_number length" \ "($c $m $d :)--no-abbrev[don't abbreviate sha1s]" \ + "(- :)--show-current[show current branch name]" \ "($l $m $d)--create-reflog[create the branch's reflog]" \ "($l $m $d -f --force)"{-f,--force}'[force the creation of a new branch]' \ "($l $m $d -t --track)"{-t,--track}'[setup configuration so that pull merges from the start point]' \ @@ -465,8 +466,10 @@ _git-checkout () { '(-q --quiet -f --force -m --merge --patch)--conflict=[same as --merge, using given merge style]:style:(merge diff3)' \ '(-)'{-p,--patch}'[interactively select hunks in diff between given tree-ish and working tree]' \ "--ignore-skip-worktree-bits[don't limit pathspecs to sparse entries only]" \ + "--no-guess[don't second guess 'git checkout ']" \ "--ignore-other-worktrees[don't check if another worktree is holding the given ref]" \ '--recurse-submodules=-[control recursive updating of submodules]::checkout:__git_commits' \ + '--no-overlay[remove files from index or working tree that are not in the tree-ish]' \ '(-q --quiet)--progress[force progress reporting]' \ '(-)--[start file arguments]' \ '*:: :->branch-or-tree-ish-or-file' && ret=0 @@ -520,6 +523,7 @@ _git-cherry-pick () { '(- :)--quit[end revert or cherry-pick sequence]' \ '(- :)--continue[resume revert or cherry-pick sequence]' \ '(- :)--abort[cancel revert or cherry-pick sequence]' \ + '--cleanup=[specify how to strip spaces and #comments from message]:mode:_git_cleanup_modes' \ '--allow-empty[preserve initially empty commits]' \ '--allow-empty-message[allow replaying a commit with an empty message]' \ '--keep-redundant-commits[keep cherry-picked commits that will become empty]' \ @@ -637,6 +641,7 @@ _git-clone () { '--recursive[initialize all contained submodules]' \ '--recurse-submodules=-[initialize submodules in the clone]::file:__git_files' \ '--separate-git-dir[place .git dir outside worktree]:path to .git dir:_path_files -/' \ + \*--server-option='[send specified string to the server when using protocol version 2]:option' \ '(-4 --ipv4 -6 --ipv6)'{-4,--ipv4}'[use IPv4 addresses only]' \ '(-4 --ipv4 -6 --ipv6)'{-6,--ipv6}'[use IPv6 addresses only]' \ '--filter=[object filtering]:filter:_git_rev-list_filters' \ @@ -699,11 +704,7 @@ _git-commit () { '(-n --no-verify)'{-n,--no-verify}'[bypass pre-commit and commit-msg hooks]' \ '--allow-empty[allow recording an empty commit]' \ '--allow-empty-message[allow recording a commit with an empty message]' \ - '--cleanup=[specify how the commit message should be cleaned up]:mode:((verbatim\:"do not change the commit message at all" - whitespace\:"remove leading and trailing whitespace lines" - strip\:"remove both whitespace and commentary lines" - scissors\:"same as whitespace but cut from scissor line" - default\:"act as '\''strip'\'' if the message is to be edited and as '\''whitespace'\'' otherwise"))' \ + '--cleanup=[specify how the commit message should be cleaned up]:mode:_git_cleanup_modes' \ '(-e --edit --no-edit)'{-e,--edit}'[edit the commit message before committing]' \ '(-e --edit --no-edit)--no-edit[do not edit the commit message before committing]' \ '--no-post-rewrite[bypass the post-rewrite hook]' \ @@ -941,6 +942,9 @@ _git-format-patch () { '--root[treat the revision argument as a range]' \ '--zero-commit[output all-zero hash in From header]' \ '--progress[show progress while generating patches]' \ + '--interdiff=[insert interdiff against previous patch series in cover letter or single patch]:reference to tip of previous series:__git_revisions' \ + '--range-diff=[insert range-diff against previous patch series in cover letter or single patch]:reference to tip ot previous series:__git_revisions' \ + '--creation-factor=[for range-diff, specify weighting for creation]:weighting (percent)' \ ': :->commit-or-commit-range' && ret=0 case $state in @@ -996,6 +1000,7 @@ _git-grep () { "(--textconv --no-textconv)--no-textconv[don't honor textconv filter settings]" \ '(-i --ignore-case)'{-i,--ignore-case}'[ignore case when matching]' \ "-I[don't match pattern in binary files]" \ + '!-r' '!--recursive' \ '--max-depth=[descend at most given levels of directories]: :__git_guard_number depth' \ '(-w --word-regexp)'{-w,--word-regexp}'[match only whole words]' \ '(-v --invert-match)'{-v,--invert-match}'[select non-matching lines]' \ @@ -1153,6 +1158,7 @@ _git-interpret-trailers() { "--only-input[don't apply config rules]" \ '--unfold[join whitespace-continued values]' \ '--parse[set parsing options]' \ + "--no-divider[don't treat --- as the end of the commit message]" \ '--trailer[specify trailer(s) to add]' \ '*:file:_files' } @@ -1470,7 +1476,8 @@ _git-rebase () { '*'{-X+,--strategy-option=}'[pass merge-strategy-specific option to merge strategy]:option' \ '(-q --quiet -v --verbose --stat -n --no-stat)'{-q,--quiet}'[suppress all output]' \ '(-q --quiet -v --verbose --stat -n --no-stat)'{-v,--verbose}'[output additional information]' \ - '--rerere-autoupdate[allow rerere to update index with resolved conflicts]' \ + '(-n --no-stat)'{-n,--no-stat}"[don't show diffstat of what changed upstream]" \ + '--rerere-autoupdate[update the index with reused conflict resolution if possible]' \ '--no-verify[bypass the pre-rebase hook]' \ '-C-[ensure that given lines of surrounding context match]: :__git_guard_number "lines of context"' \ '(-f --force-rebase)'{-f,--force-rebase}'[force rebase even if current branch descends from commit rebasing onto]' \ @@ -1479,19 +1486,20 @@ _git-rebase () { '(-i --interactive)--committer-date-is-author-date[use author date as committer date]' \ '(-i --interactive --ignore-whitespace --whitespace --committer-date-is-author-date)'{-i,--interactive}'[make a list of commits to be rebased and open in $EDITOR]' \ '(-r --rebase-merges)'{-r-,--rebase-merges=-}'[try to rebase merges instead of skipping them]::option:(rebase-cousins no-rebase-cousins)' \ - '(-p --preserve-merges --interactive)'{-p,--preserve-merges}'[try to recreate merges instead of ignoring them]' \ + '!(-p --preserve-merges --interactive)'{-p,--preserve-merges} \ {-x+,--exec=}'[with -i\: append "exec " after each line]:command:_command_names -e' \ '(-k --keep-empty)'{-k,--keep-empty}'[keep empty commits in the result]' \ '--allow-empty-message[allow rebasing commits with empty messages]' \ '(1)--root[rebase all reachable commits]' \ $autosquash_opts \ '(--autostash --no-autostash)--autostash[stash uncommitted changes before rebasing and apply them afterwards]' \ - '(--autostash --no-autostash)--no-autostash[do not stash uncommitted changes before rebasing and apply them afterwards]' \ + "(--autostash --no-autostash)--no-autostash[don't stash uncommitted changes before rebasing and apply them afterwards]" \ '--fork-point[use merge-base --fork-point to refine upstream]' \ '--ignore-date[use current timestamp for author date]' \ '--signoff[add Signed-off-by: line to the commit message]' \ '--no-ff[cherry-pick all rebased commits with --interactive, otherwise synonymous to --force-rebase]' \ '--onto=[start new branch with HEAD equal to given revision]:newbase:__git_revisions' \ + "--reschedule-failed-exec[automatically re-schedule any 'exec' that fails]" \ ':upstream branch:__git_revisions' \ '::working branch:__git_revisions' } @@ -1538,6 +1546,7 @@ _git-revert () { '(- :)--quit[end revert or cherry-pick sequence]' \ '(- :)--continue[resume revert or cherry-pick sequence]' \ '(- :)--abort[cancel revert or cherry-pick sequence]' \ + '--cleanup=[specify how to strip spaces and #comments from message]:mode:_git_cleanup_modes' \ '(-e --edit --no-edit)'{-e,--edit}'[edit the commit before committing the revert]' \ '(-e --edit --no-edit)--no-edit[do not edit the commit message before committing the revert]' \ '(-m --mainline)'{-m+,--mainline=}'[pick which parent is mainline]:parent number' \ @@ -1819,6 +1828,7 @@ _git-submodule () { init:'initialize a submodule' deinit:'unregister a submodule' update:'update a submodule' + set-branch:'set the default remote tracking branch for the submodule' summary:'show commit summary between given commit and working tree/index' foreach:'evaluate shell command in each checked-out submodule' absorbgitdirs:'move the git directory of a submodule into its superprojects' @@ -1875,7 +1885,13 @@ _git-submodule () { '--force[discard local changes by checking out the current up-to-date version]' \ '--init[initialize uninitialized submodules]' \ '*: :__git_ignore_line_inside_arguments __git_submodules' && ret=0 - ;; + ;; + (set-branch) + _arguments -C -A '-*' \ + '(-d --default)'{-d,--default}'[remove config key to cause the tracking branch to default to master]' \ + '(-b --branch)'{-b,--branch=}'[specify the remote branch]:remote branch' \ + '1:path:_directories' + ;; (summary) _arguments -C -A '-*' \ '(-q --quiet)'{-q,--quiet}'[suppress all output]' \ @@ -2025,7 +2041,7 @@ _git-tag () { '(-a --annotate -s --sign)'{-u+,--local-user=}'[create a tag, annotated and signed with the given key]: :__git_gpg_secret_keys' \ '(-f --force)'{-f,--force}'[replace existing tag]' \ '--create-reflog[create a reflog]' \ - '--cleanup=[cleanup message]:mode:((verbatim\:"no cleanup" whitespace\:"remove leading and trailing whitespace" strip\:"remove leading and trailing whitespace and comments"))' \ + '--cleanup=[specify how to strip spaces and #comments from message]:mode:_git_cleanup_modes' \ '(-m --message -F --file)'{-F+,--file=}'[read tag message from given file]:message file:_files' \ '(-m --message -F --file)'{-m+,--message=}'[specify tag message]:message' \ ': :__git_tags' \ @@ -2168,11 +2184,12 @@ _git-config () { fi _arguments -C -S -s \ - '( --system --local -f --file --blob)--global[use user-global config file]' \ - '(--global --local -f --file --blob)--system[use system-wide config file]' \ - '(--global --system -f --file --blob)--local[use local config file]' \ - '(--global --system --local --blob)'{-f+,--file=}'[use given config file]:config file:_files' \ - '(--global --system --local -f --file)--blob=[read config from given blob object]:blob:__git_blobs' \ + '( --system --local --worktree -f --file --blob)--global[use user-global config file]' \ + '(--global --local --worktree -f --file --blob)--system[use system-wide config file]' \ + '(--global --system --worktree -f --file --blob)--local[use local config file]' \ + '(--global --system --local -f --file --blob)--worktree[use per-worktree config file]' \ + '(--global --system --local --worktree --blob)'{-f+,--file=}'[use given config file]:config file:_files' \ + '(--global --system --local --worktree -f --file)--blob=[read config from given blob object]:blob:__git_blobs' \ '(-t --type --bool --int --bool-or-int --path --expiry-date)'{-t+,--type=}'[ensure that incoming and outgoing values are canonicalize-able as the given type]:type:(bool int bool-or-int path expiry-date color)' \ '(-t --type --int --bool-or-int --path --expiry-date)--bool[setting is a boolean]' \ '(-t --type --bool --bool-or-int --path --expiry-date)--int[setting is an integer]' \ @@ -2257,6 +2274,8 @@ __git_config_option-or-value () { advice.detachedHead:'show advice when entering detached-HEAD state::->bool:true' advice.amWorkDir:'show the location of the patch file when git-am fails to apply it::->bool:true' advice.rmHints:'show directions in case of failure in the output of git-rm(1)::->bool:true' + author.email:'email address used for author in commits::_email_addresses -c' + author.name:'full name used for author in commits:name:->string' blame.blankboundary:'show blank SHA-1 for boundary commits::->bool:false' blame.showroot:'show root commits as normal commits::->bool:false' blame.date:'date format to use in output::__git_date_formats:iso' @@ -2267,6 +2286,8 @@ __git_config_option-or-value () { column.clean:'specify the layout when listing items in git clean -i::->column:never' column.status:'specify whether to output untracked files in git status in columns::->column:never' column.tag:'specify whether to output tag listing in git tag in columns::->column:never' + committer.email:'email address used for committer in commits::_email_addresses -c' + committer.name:'full name used for committer in commits:name:->string' core.fileMode:'track changes to the executable bit of files::->bool:true' core.attributesfile:'look into this file for attributes in addition to .gitattributes:additional attributes file:_files' core.abbrev:'set the length object names are abbreviated to:length:->int:7' @@ -2379,7 +2400,7 @@ __git_config_option-or-value () { color.status.untracked:'color of files not currently being tracked::->color' color.status.nobranch:'color of no-branch warning::->color' color.ui:'color output of capable git commands::->color-bool:auto' - commit.cleanup:'default --cleanup option::->commit.cleanup:default' + commit.cleanup:'default --cleanup option::_git_cleanup_modes' commit.gpgsign:'always GPG-sign commits::->bool:false' commit.status:'include status information in commit message template::->bool:true' commit.template:'template file for commit messages:template:_files' @@ -2936,6 +2957,8 @@ __git_config_option-or-value () { else sections=( advice:'options controlling advice' + author:'options controlling author identity' + committer:'options controlling committer identity' core:'options controlling git core' credential:'credential options' add:'git add options' @@ -3138,13 +3161,6 @@ __git_config_option-or-value () { row:'fill rows before columns (implies "always")' \ plain:'show in one column (implies "always")' && ret=0 ;; - (commit.cleanup) - __git_config_values -- "$current" "$parts[5]" \ - strip:'remove both whitespace and commentary lines' \ - whitespace:'remove leading and trailing whitespace lines' \ - verbatim:'no not change the commit message at all' \ - default:'act as '\''strip'\'' if the message is to be edited and as '\''whitespace'\'' otherwise' && ret=0 - ;; (compression) __git_compression_levels && ret=0 ;; @@ -3433,6 +3449,8 @@ _git-fast-export () { '(--get --get-all)--name-only[show variable names only]' \ '*--refspec=[apply refspec to exported refs]:refspec' \ '--anonymize[anonymize output]' \ + '--reference-excluded-parents[reference parents not in fast-export stream by object id]' \ + '--show-original-ids[show original object ids of blobs/commits]' \ '*: :__git_commit_ranges' } @@ -3490,6 +3508,8 @@ _git-mergetool () { '--tool-help[print a list of merge tools that may be used with "--tool"]' \ '(-y --no-prompt --prompt)'{-y,--no-prompt}'[do not prompt before invocation of merge resolution program]' \ '(-y --no-prompt)--prompt[prompt before invocation of merge resolution program]' \ + '(-g --gui)'{-g,--gui}'[use merge.guitool variable instead of merge.tool]' \ + '!(-g --gui)--no-gui' \ '-O-[process files in the order specified in file]:order file:_files' \ '*:conflicted file:_files' } @@ -3715,6 +3735,7 @@ _git-repack () { '(-q --quiet)'{-q,--quiet}'[pass -q option to git pack-objects]' \ '(-l --local)'{-l,--local}'[pass --local option to git pack-objects]' \ '(-b --write-bitmap-index)'{-b,--write-bitmap-index}'[write a bitmap index]' \ + '(-i --delta-islands)'{-i,--delta-islands}'[pass --delta-islands to git-pack-objects]' \ "--unpack-unreachable=[with -A, don't loosen objects older than specified time]:time" \ '(-k --keep-unreachable)'{-k,--keep-unreachable}'[with -a, repack unreachable objects]' \ '--window=[number of objects to consider when doing delta compression]:number of objects' \ @@ -3828,7 +3849,7 @@ _git-count-objects () { _git-difftool () { # TODO: Is this fine, or do we need to modify the context or similar? _git-diff \ - '(-d --dir-diff)'{-d,--dir-diff}'[diff a whole tree by preparing a temporary copy]' \ + '(-d --dir-diff --no-index)'{-d,--dir-diff}'[diff a whole tree by preparing a temporary copy]' \ '(-y --no-prompt --prompt)'{-y,--no-prompt}'[do not prompt before invocation of diff tool]' \ '(-y --no-prompt)--prompt[prompt before invocation of diff tool]' \ '(-t --tool -x --extcmd)'{-t,--tool=-}'[merge resolution program to use]: :__git_difftools' \ @@ -4182,7 +4203,8 @@ _git-quiltimport () { '(-n --dry-run)'{-n,--dry-run}'[check patches and warn if they cannot be imported]' \ '--author[default author name and email address to use for patches]: :_email_addresses' \ '--patches[set directory containing patches]:patch directory:_directories' \ - '--series[specify quilt series file]:series file:_files' + '--series[specify quilt series file]:series file:_files' \ + '--keep-non-patch[pass -b to git mailinfo]' } (( $+functions[_git-request-pull] )) || @@ -4221,7 +4243,8 @@ _git-send-email () { '--smtp-server-option=[specify the outgoing SMTP server option to use]:SMPT server option' \ '--smtp-ssl-cert-path=[path to ca-certificates (directory or file)]:ca certificates path:_files' \ '--smtp-user=[specify user to use for SMTP-AUTH]:smtp user:_users' \ - '--smtp-auth=[specify allowed AUTH mechanisms]:space-separated list of mechanisms' \ + '(--no-smtp-auth)--smtp-auth=[specify allowed AUTH mechanisms]:space-separated list of mechanisms' \ + '(--smtp-auth)--no-smtp-auth[disable SMTP authentication]' \ '--smtp-debug=[enable or disable debug output]:smtp debug:((0\:"disable" 1\:"enable"))' \ '--batch-size=[specify maximum number of messages per connection]:number' \ '--relogin-delay=[specify delay between successive logins]:delay (seconds)' \ @@ -4596,6 +4619,24 @@ _git-checkout-index () { '*: :__git_cached_files' } +(( $+functions[_git-commit-graph] )) || +_git-commit-graph() { + local -a args + if [[ $words[2] = write ]]; then + args=( + '--append[include all commits present in existing commit-graph file]' + '(--stdin-packs --stdin-commits)--reachable[walk commits starting at all refs]' + '(--reachable --stdin-commits)--stdin-packs[only walk objects in pack-indexes read from input]' + '(--reachable --stdin-packs)--stdin-commits[walk commits starting at commits read from input]' + ) + fi + + _arguments $args \ + '--object-dir=[specify location of packfiles and commit-graph file]:directory:_directories' \ + '(- 1)-h[display usage]' \ + '(-h)1:verb:(read verify write)' +} + (( $+functions[_git-commit-tree] )) || _git-commit-tree () { _arguments \ @@ -4705,6 +4746,13 @@ _git-mktree () { '--batch[allow creation of more than one tree]' } +(( $+functions[_git-multi-pack-index] )) || +_git-multi-pack-index() { + _arguments \ + '--object-dir=[specify location of git objects]:directory:_directories' \ + '1:verb:(write verify)' +} + (( $+functions[_git-pack-objects] )) || _git-pack-objects () { local thin_opt= @@ -4740,6 +4788,7 @@ _git-pack-objects () { '(--unpack-unreachable)--keep-unreachable[keep unreachable ]' \ '--pack-loose-unreachable[pack loose unreachable objects]' \ '(--keep-unreachable)--unpack-unreachable=-[unpack unreachable objects newer than specified time]::time' \ + '--sparse[use sparse reachability algorithm]' \ '--include-tag[include tag objects that refer to objects to be packed]' \ $thin_opt \ '--shallow[create packs suitable for shallow fetches]' \ @@ -4752,6 +4801,7 @@ _git-pack-objects () { '--filter=[omit certain objects from pack file]:filter:_git_rev-list_filters' \ '--missing=[specify how missing objects are handled]:action:(error allow-any allow-promisor print)' \ "--exclude-promisor-objects[don't pack objects in promisor packfiles]" \ + '--delta-islands[respect islands during delta compression]' \ ':base-name:_files' } @@ -4800,6 +4850,7 @@ _git-read-tree () { '--no-sparse-checkout[display sparse checkout support]' \ '--debug-unpack[debug unpack-trees]' \ '--recurse-submodules=-[control recursive updating of submodules]::checkout:__git_commits' \ + '(-q --quiet)'{-q,--quiet}'[suppress feedback messages]' \ '--empty[instead of reading tree object(s) into the index, just empty it]' \ '1:first tree-ish to be read/merged:__git_tree_ishs' \ '2::second tree-ish to be read/merged:__git_tree_ishs' \ @@ -4978,6 +5029,7 @@ _git-diff-tree () { '--no-commit-id[do not display commit IDs]' \ '(-c --cc)-c[show differences from each of parents to merge result]' \ '(-c --cc)--cc[how differences from each of parents and omit differences from only one parent]' \ + '--combined-all-paths[show name of file in all parents for combined diffs]' \ '--always[always show commit itself and commit log message]' \ ': :__git_tree_ishs' \ '*:: :->files' && ret=0 @@ -5196,7 +5248,7 @@ _git_rev-list_filters() { 'blob\:none[omit all blobs]' \ 'blob\:limit[omit blobs larger than specified size]:size' \ 'sparse\:oid[uses a sparse-checkout specification contained in the blob]:blob-ish' \ - 'sparse\:path[uses a sparse-checkout specification contained in path]:path:_directories' + 'tree\:0[omit blobs and trees with depth exceeding limit]' } (( $+functions[_git-show-index] )) || @@ -5763,17 +5815,14 @@ _git_commands () { ancillary_interrogator_commands=( blame:'show what revision and author last modified each line of a file' - cherry:'find commits not merged upstream' count-objects:'count unpacked objects and display their disk consumption' difftool:'show changes using common diff tools' fsck:'verify connectivity and validity of objects in database' - get-tar-commit-id:'extract commit ID from an archive created using git archive' help:'display help information about git' instaweb:'instantly browse your working repository in gitweb' interpret-trailers:'add or parse structured information in commit messages' merge-tree:'show three-way merge without touching index' rerere:'reuse recorded resolution of conflicted merges' - rev-parse:'pick out and massage parameters for other git commands' show-branch:'show branches and their commits' verify-commit:'check GPG signature of commits' verify-tag:'check GPG signature of tags' @@ -5793,6 +5842,7 @@ _git_commands () { plumbing_manipulator_commands=( apply:'apply patch to files and/or to index' checkout-index:'copy files from index to working directory' + commit-graph:'write and verify Git commit-graph files' commit-tree:'create new commit object' hash-object:'compute object ID and optionally create a blob from a file' index-pack:'build pack index file for an existing packed archive' @@ -5800,6 +5850,7 @@ _git_commands () { merge-index:'run merge for files needing merging' mktag:'create tag object' mktree:'build tree-object from git ls-tree formatted text' + multi-pack-index:'write and verify multi-pack-indexes' pack-objects:'create packed archive of objects' prune-packed:'remove extra objects that are already in pack files' read-tree:'read tree information into directory index' @@ -5811,10 +5862,12 @@ _git_commands () { plumbing_interrogator_commands=( cat-file:'provide content or type information for repository objects' + cherry:'find commits not merged upstream' diff-files:'compare files in working tree and index' diff-index:'compare content and mode of blobs between index and repository' diff-tree:'compare content and mode of blobs found via two tree objects' for-each-ref:'output information on each ref' + get-tar-commit-id:'extract commit ID from an archive created using git archive' ls-files:'information about files in index/working directory' ls-remote:'show references in a remote repository' ls-tree:'list contents of a tree object' @@ -5822,6 +5875,7 @@ _git_commands () { name-rev:'find symbolic names for given revisions' pack-redundant:'find redundant pack files' rev-list:'list commit object in reverse chronological order' + rev-parse:'pick out and massage parameters for other git commands' show-index:'show packed archive index' show-ref:'list references in a local repository' unpack-file:'create temporary file with blob'\''s contents' @@ -5916,7 +5970,7 @@ __git_extract_aliases () { __git_date_formats () { declare -a date_formats - if compset -P 'format:'; then + if compset -P 'format(-local|):'; then _strftime return fi @@ -5929,6 +5983,7 @@ __git_date_formats () { rfc{,2822}:'show timestamps in RFC 2822 format' short:'show only date but not time' raw:'show date in internal raw git format (%s %z)' + human:'elide some current and recent date elements' unix:'show date as a Unix epoch timestamp' default:'show timestamp in the original timezone' ) @@ -5936,6 +5991,52 @@ __git_date_formats () { _describe -t date-formats 'date format' date_formats -- '( format\:custom\ format )' -S : } +(( $+functions[_git_diff_filters] )) || +_git_diff_filters() { + local sep + local -a dispinc dispexc exclude + typeset -A filters + exclude=( ${(s..)PREFIX:u} ${(s..)SUFFIX:u} ${(s..)PREFIX:l} ${(s..)SUFFIX:l} ) + compset -P \* + compset -S \* + filters=( A added C copied D deleted M modified R renamed T changed b "pairing broken" ) + if zstyle -T ":completion:${curcontext}:" verbose; then + zstyle -s ":completion:${curcontext}:" list-separator sep || sep=-- + print -v dispinc -f "%s $sep %s" ${(kv)filters} + print -v dispexc -f "%s $sep %s" ${(kv)filters:l} + else + dispinc=() + fi + _alternative \ + "included-file-types:included file type:compadd -S '' -d dispinc -F exclude -k filters" \ + "excluded-file-types:excluded file type:compadd -S '' -d dispexc -F exclude ${(k)filters:l}" +} + +(( $+functions[_git_dirstat_params] )) || +_git_dirstat_params() { + + _alternative \ + "limits: :_guard '(*,|)[0-9]#' 'minimum cut-off limit (percent)'" \ + "parameters: :_values -s , 'method for computing stats [changes]' + '(lines files)changes[count added/removed lines, ignoring moves]' + '(changes files)lines[count added/removed lines]' + '(changes lines)files[count number of files changed]' + 'cumulative[count changes in a child directory for the parent directory as well]'" +} + +(( $+functions[_git_cleanup_modes] )) || +_git_cleanup_modes() { + declare -a cleanup_modes + cleanup_modes=( + strip:'remove both whitespace and commentary lines' + whitespace:'remove leading and trailing whitespace lines' + verbatim:"don't change the commit message at all" + scissors:"same as whitespace but cut from scissor line" + default:'act as '\''strip'\'' if the message is to be edited and as '\''whitespace'\'' otherwise' + ) + _describe -t modes mode cleanup_modes +} + (( $+functions[__git_gpg_secret_keys] )) || __git_gpg_secret_keys () { local expl @@ -6221,6 +6322,7 @@ __git_ref_fields () { fields=( 'objecttype:the type of the object' 'objectsize:the size of the object' + 'deltabase:object name of the delta base of the object' 'HEAD:* if HEAD matches ref or space otherwise' 'tree:the tree header-field' 'parent:the parent header-field' @@ -7133,15 +7235,21 @@ __git_setup_diff_options () { '(--minimal --patience --histogram --diff-algorithm)--minimal[spend extra time to make sure the smallest possible diff is produced]' '(--minimal --patience --histogram --diff-algorithm)--patience[generate diffs with patience algorithm]' '(--minimal --patience --histogram --diff-algorithm)--histogram[generate diffs with histogram algorithm]' + '(--minimal --patience --histogram --diff-algorithm)*--anchored=[generate diffs using the "anchored diff" algorithm]:text' '(--minimal --patience --histogram --diff-algorithm)--diff-algorithm=[choose a diff algorithm]:diff algorithm:((default\:"basic greedy diff algorithm" myers\:"basic greedy diff algorithm" minimal\:"spend extra time to make sure the smallest possible diff is produced" patience\:"generate diffs with patience algorithm" histogram\:"generate diffs with histogram algorithm"))' '--stat=-[generate diffstat instead of patch]:: :__git_guard_diff-stat-width' + '--stat-width=-[generate diffstat with a given width]:width' + '--stat-graph-width=-[generate diffstat with a given graph width]:width' + '--stat-count=[generate diffstat with limited lines]:lines' + '--compact-summary[generate compact summary in diffstat]' '--numstat[generate more machine-friendly diffstat]' '--shortstat[generate summary diffstat]' - '--dirstat=-[generate dirstat by amount of changes]:: :__git_guard_number limit' + '--dirstat=-[generate dirstat by amount of changes]:: :_git_dirstat_params' + '--cumulative[synonym for --dirstat=cumulative]' '--dirstat-by-file=-[generate dirstat by number of files]:: :__git_guard_number limit' '--summary[generate condensed summary of extended header information]' '--patch-with-stat[generate patch and prepend its diffstat]' @@ -7165,18 +7273,25 @@ __git_setup_diff_options () { blocks\:"greedily detect blocks of moved text of at least 20 characters" zebra\:"like blocks, with alternating colors between different blocks" dimmed-zebra\:"like zebra, uninteresting parts are dimmed"))' + '(--no-color-moved-ws)--color-moved-ws=[configure how whitespace is ignored when performing move detection for --color-moved]:mode:_sequence compadd - no ignore-space-at-eol ignore-space-change ignore-all-space allow-indentation-change' + "(--color-moved-ws)--no-color-moved-ws=[don't ignore whitespace when performing move detection]" + "--ita-invisible-in-index[hide 'git add -N' entries from the index]" + "!(--ita-invisible-in-index)--ita-visible-in-index" '--no-renames[turn off rename detection]' $exclusive_diff_options'--check[warn if changes introduce trailing whitespace or space/tab indents]' '--full-index[show full object name of pre- and post-image blob]' '(--full-index)--binary[in addition to --full-index, output binary diffs for git-apply]' + '--ws-error-highlight=[specify where to highlight whitespace errors]: :_values -s , "kind of line" all default none context old new' '--abbrev=[set minimum SHA1 display-length]: :__git_guard_number length' '(-B --break-rewrites)'{-B-,--break-rewrites=-}'[break complete rewrite changes into pairs of given size]:: :__git_guard_number size' '(-M --find-renames)'{-M-,--find-renames=-}'[detect renames with given scope]:: :__git_guard_number size' '(-C --find-copies)'{-C-,--find-copies=-}'[detect copies as well as renames with given scope]:: :__git_guard_number size' '--find-copies-harder[try harder to find copies]' '(-D --irreversible-delete)'{-D,--irreversible-delete}'[omit the preimage for deletes]' + '--rename-empty[use empty blobs as rename source]' + '--follow[continue listing the history of a file beyond renames]' '-l-[limit number of rename/copy targets to run]: :__git_guard_number' - '--diff-filter=-[select certain kinds of files for diff]: :_guard "[AaCcDdMmRrTtUuXxBb*]#" kinds' + '--diff-filter=-[select certain kinds of files for diff]: :_git_diff_filters' '-S-[look for differences that add or remove the given string]:string' '-G-[look for differences whose added or removed line matches the given regex]:pattern' '--find-object=[look for differences that change the number of occurrences of the specified object]:object:__git_blobs' @@ -7187,10 +7302,15 @@ __git_setup_diff_options () { '--relative=-[exclude changes outside and output relative to given directory]:: :_directories' '(-a --text)'{-a,--text}'[treat all files as text]' '--ignore-space-at-eol[ignore changes in whitespace at end of line]' + '--ignore-cr-at-eol[ignore carriage-return at end of line]' '(-b --ignore-space-change -w --ignore-all-space)'{-b,--ignore-space-change}'[ignore changes in amount of white space]' '(-b --ignore-space-change -w --ignore-all-space)'{-w,--ignore-all-space}'[ignore white space when comparing lines]' '--ignore-blank-lines[do not show hunks that add or remove blank lines]' + '--no-indent-heuristic[disable heuristic that shifts diff hunk boundaries to make patches easier to read]' '--inter-hunk-context=[combine hunks closer than n lines]:n' + '--output-indicator-new=[specify the character to indicate a new line]:character [+]' + '--output-indicator-old=[specify the character to indicate a old line]:character [-]' + '--output-indicator-context=[specify the character to indicate a context line]:character [ ]' '--exit-code[report exit code 1 if differences, 0 otherwise]' '( --no-ext-diff)--ext-diff[allow external diff helper to be executed]' '(--ext-diff )--no-ext-diff[disallow external diff helper to be executed]' @@ -7199,6 +7319,7 @@ __git_setup_diff_options () { '--ignore-submodules[ignore changes to submodules]:: :__git_ignore_submodules_whens' '(--no-prefix)--src-prefix=[use given prefix for source]:prefix' '(--no-prefix)--dst-prefix=[use given prefix for destination]:prefix' + '--line-prefix=[prepend additional prefix to every line of output]:prefix' '(--src-prefix --dst-prefix)--no-prefix[do not show any source or destination prefix]' '(-c --cc)'{-c,--cc}'[combined diff format for merge commits]' @@ -7240,6 +7361,8 @@ __git_format_placeholders() { 'G?:indicate [G]ood, [B]ad, [U]ntrusted or [N]o signature' 'GS:name of signer' 'GK:signing key' + 'GF:fingerprint of signing key' + 'GP:fingerprint of primary key whose subkey was used to sign' ) disp=( -l ) elif [[ -prefix %g ]]; then @@ -7247,6 +7370,7 @@ __git_format_placeholders() { gD:'reflog selector' gd:'short reflog selector' gn:'reflog identity' + gN:'reflog identity name' ge:'reflog identity email' gE:'reflog identity email (use .mailmap)' gs:'reflog subject' @@ -7278,6 +7402,7 @@ __git_format_placeholders() { c:'committer details' d:'ref name in brackets' D:'ref name' + S:'ref name used to reach commit' e:encoding s:subject f:'sanitized subject' @@ -7411,6 +7536,7 @@ __git_setup_merge_options () { '(--commit )--no-commit[perform the merge but do not commit the result]' '( --no-edit -e)--edit[open an editor to change the commit message]' "(--edit -e)--no-edit[don't open an editor to change the commit message]" + '--cleanup=[specify how to strip spaces and #comments from message]:mode:_git_cleanup_modes' '( --no-ff)--ff[do not generate a merge commit if the merge resolved as a fast-forward]' '(--ff )--no-ff[generate a merge commit even if the merge resolved as a fast-forward]' '( --no-log)--log=-[add entries from shortlog to merge commit message]::entries to add' @@ -7446,7 +7572,7 @@ __git_setup_fetch_options () { '(-4 --ipv4 -6 --ipv6)'{-4,--ipv4}'[use IPv4 addresses only]' '(-4 --ipv4 -6 --ipv6)'{-6,--ipv6}'[use IPv6 addresses only]' '--dry-run[show what would be done, without making any changes]' - '(-f --force)'{-f,--force}'[allow refs that are not ancestors to be updated]' + '(-f --force)'{-f,--force}'[force overwrite of local reference]' '(-k --keep)'{-k,--keep}'[keep downloaded pack]' '(-p --prune)'{-p,--prune}'[remove any remote tracking branches that no longer exist remotely]' '(--no-tags -t --tags)'{-t,--tags}'[fetch remote tags]' @@ -7660,6 +7786,7 @@ __git_diff-or-merge-tools () { p4merge tkdiff tortoisemerge + smerge vimdiff vimdiff2 vimdiff3 @@ -7763,6 +7890,7 @@ __git_sendemail_suppresscc_values () { cccmd:'avoid running --cc-cmd' \ tocmd:'avoid running --to-cmd' \ body:'equivalent to sob + bodycc' \ + misc-by:'avoid including anyone mentioned in various "-by" lines in the patch body' \ all:'avoid all auto Cc values' } -- cgit 1.4.1