With using `_guard` there like it's been done, the completion could not
be selected, probably because of the call to `_message` therein.
This changes it to use only the logic/check from `_guard` that we want
here.
Remove "-2" for _describe in __git_recent_commits.
This fixes the duplicate entries issue, because __git_recent_commits
gets called twice for _git-checkout (for __git_revisions and
__git_tree_ishs):
1. __git_commit_objects_prefer_recent _alternative __git_commits
__git_revisions _alternative _git-checkout
2. __git_commit_objects_prefer_recent _alternative __git_commits
__git_tree_ishs _alternative _git-checkout
$pipestatus for `: foo` is 0 always.
Without this, "git checkout" in a non-git directory would complete " ",
but not result in a note/error about not being in a git dir.
Allows 'git checkout o/m<TAB>' to complete 'origin/master'.
Moreover, '/x<TAB>' would complete 'foo/bar/xyzzy/baz', since the matchspec
uses not '*' but '**'.
This adds the "HEAD~15" gitrevisions(7) identifier of the commit to the
description, which also uniquifies, isn't redundant, and may be easier
to type.
Ref: zsh-workers/34820 (http://www.zsh.org/mla/workers/2015/msg00744.html)
Also, `--all` and `--reflog` is used to get all commits.
It adds the _guard in front, so only non-empty values will come here.
Also, __git_commit_objects_prefer_recent will only call it, if there are
no matching recent commits.
It is now possible to use the tag-order style to stagger the overwhelming
'git <TAB>' subcommand listing. For example:
zstyle ':completion::complete:git:argument-1:' tag-order \
main-porcelain-commands user-commands third-party-commands \
ancillary-manipulator-commands ancillary-interrogator-commands \
plumbing-manipulator-commands plumbing-interrogator-commands \
aliases
- cherry-pick: allow commit ranges to be specified
- push: option is called --set-upstream and not --set-upstream-to
- status: offer -b,--branch when --porcelain or -z are given
--porcelain and -z don't show the branch info by default, so it
is needed to offer --branch for those options, too.
- checkout: add '--detach' option
- checkout: offer '-l' option when '--orphan' was given
- show-ref: update wording of --head and --heads according to man-page
- config: update default value for color.ui
color-bool was changed to accept a default value as $parts[5]
- add support for 'cygstart' as a valid builtin browser on cygwin
- rebase: add suuport for --autostash and config.autostash
- update builtin browser list
- grep: add --{no,}textconv
- check-ignore: add --no-index
- update-ref: add --stdin -z
- add -C
- pull: add support for --rebase=preserve
- config: add support for http.*. options
- blame: -L can be given multiple times
- config: add support for http.savecookies
- push: add support for --force-with-lease
- diff: --diff-filter: allow lower-case variants (all-but ... specs)
- config: add support for 'fetch.prune' and 'remote.*.prune'
- check-ignore: -z: update message, check-attr: add -z
- config: add diff.orderfile
- revision options: add --exclude
- revision options: add --ignore-missing
- revision options: add --bisect
- rev-parse: add --stuck-long
- merge-base: add --fork-point
- config: implement submodule.*.update completion
- send-email: add --smtp-ssl-cert-path and config options
The output of 'submodule status' is
Xsha1 name (describe)
X being one of -,+,U,[space]
We are only interested in the name part and not the whole line.
Fix the parameter expansions accordingly.
Before this, there were several cases where the completion
would offer the wrong things:
$ git diff branch -- <tab>
would try to complete "changed in workdir files", but needs to
complete all "tree files in HEAD".
$ git diff --cached -- file1 file2 <tab>
would try to complete "changed in workdir files" but needs to
complete "changed in index files".
...
After this change all possible combinations are taken into
account and completion should work properly.