To do this the majority of _git_log has been factored out into the new __git_complete_log_opts. This is needed because the visualize command accepts git-log options but not rev arguments (they are fixed to the commits under bisection). Signed-off-by: Britton Leo Kerin <britton.kerin@xxxxxxxxx> --- contrib/completion/git-completion.bash | 30 ++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash index 15d22ff7d9..3472fab514 100644 --- a/contrib/completion/git-completion.bash +++ b/contrib/completion/git-completion.bash @@ -1472,6 +1472,16 @@ _git_bisect () ;; esac ;; + visualize) + case "$cur" in + -*) + __git_complete_log_opts + return + ;; + *) + ;; + esac + ;; esac case "$subcommand" in @@ -2074,11 +2084,12 @@ __git_diff_merges_opts="off none on first-parent 1 separate m combined c dense-c __git_log_pretty_formats="oneline short medium full fuller reference email raw format: tformat: mboxrd" __git_log_date_formats="relative iso8601 iso8601-strict rfc2822 short local default human raw unix auto: format:" -_git_log () -{ - __git_has_doubledash && return - __git_find_repo_path +# Find only porcelain (i.e. not git-rev-list) option (not argument) and +# selected option argument completions for git-log options and put them in +# COMPREPLY. +__git_complete_log_opts () +{ local merge="" if [ -f "$__git_repo_path/MERGE_HEAD" ]; then merge="--merge" @@ -2171,6 +2182,17 @@ _git_log () return ;; esac + +} + +_git_log () +{ + __git_has_doubledash && return + __git_find_repo_path + + __git_complete_log_opts + [ -z "$COMPREPLY" ] || return + __git_complete_revlist } -- 2.43.0