This patch makes three changes:
- Enable 'git diff o/m<TAB>' to complete to 'origin/master..' with the
".." being autoremovable.
This is implemented by the first hunk. That hunk is a functional
subset of Oliver's users/20705, however, the latter hasn't been
committed.
- Make typing "^" remove the "..", in light of the syntax "foo^..bar".
- Make typing "." _not_ remove the ".." but simply append it, since
"foo...bar" is a valid and useful syntax.
Before this patch, 'git push $remote :<TAB>' completed branch names (as though
by `git branch -a`), instead of completing remote branch names sans the
${remote}/ prefix.
The uniquifiers 'HEAD~$n' were incorrect when a recent commit was the second
parent of a merge commit. Detect that case and print something correct
instead.
Offer the "this alternative is still valid, but I don't know to offer
completions for it" for hash completion but not for recent object completion;
the former is protected by a _guard and the latter incorrectly appeared also in
cases such as 'git log a/b<TAB>' which were not the start of a gitrevisions(7)
expression.
It is defined at the beginning of the function already, and results in
the output of `expl=''` when completing after `git config
branch.local.pushremote ` etc.
This makes `branch_arg` empty by default, to be used only for
__git_remote_branch_names.
`branches::__git_revisions` was used here, but that's the same as
tree_ish_arg='tree-ishs::__git_tree_ishs' - both call __git_commits.
Only tree_ish_arg will call __git-commits now.
Without this, `ret` will be set to 1 with `git diff --ex<tab>` and
result in duplicate entries:
% git diff --ex<tab>
-- option --
--exit-code -- report exit code 1 if differences, 0 otherwise
--exit-code -- report exit code 1 if differences, 0 otherwise
--ext-diff -- allow external diff helper to be executed
--ext-diff -- allow external diff helper to be executed
--no-ext-diff -- disallow external diff helper to be executed
-- recent commit object name --
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