[PATCH v5 0/3] completion of 'git [-C <dir>] diff'

Junio C Hamano <[email protected]>
Newsgroups org.kernel.vger.git
Message-ID <[email protected]>
The primary motivation for this topic is that the command-line
completion of 'git diff' does not handle paths (unlike 'git status'
and 'git add') and instead relies on the default behavior of Bash
command-line completion, which completes files in $PWD; this does
not work at all with the '-C <directory>' option.

This series teaches the completion machinery to complete revisions
(unless '--' exists), then tracked paths, and then untracked paths,
before letting the Bash default kick in.  This way, we correctly
complete 'git diff' command line even when '-C <directory>' is in
effect.

The v5 iteration addresses two points identified by Elijah in v4.
Hopefully this will be the "small and final" reroll.

 1/3: completion: no-op refactoring of diff completion
 2/3: completion: complete tracked paths for 'git diff'
 3/3: completion: 'git diff' completes untracked paths as a last
        resort

 contrib/completion/git-completion.bash | 69 +++++++++++++++-----------
 t/t9902-completion.sh                  | 59 ++++++++++++++++++++++
 2 files changed, 100 insertions(+), 28 deletions(-)

Range-diff against v4:
1:  d3c51c042c ! 1:  8295035d13 completion: no-op refactoring of diff completion
    @@ contrib/completion/git-completion.bash: __git_diff_difftool_options="--cached --
     -	--*)
     -		__gitcomp "$__git_diff_difftool_options"
     -		return
    +-		;;
    +-	esac
    +-	__git_complete_revlist_file
     +	if ! __git_has_doubledash; then
     +		case "$cur" in
     +		--diff-algorithm=*)
     +			__gitcomp "$__git_diff_algorithms" \
     +				"" "${cur##--diff-algorithm=}"
     +			return
    - 		;;
    --	esac
    --	__git_complete_revlist_file
    ++			;;
     +		--submodule=*)
     +			__gitcomp "$__git_diff_submodule_formats" \
     +				"" "${cur##--submodule=}"
2:  c3658d6ca2 ! 2:  dbb14298c1 completion: complete tracked paths for 'git diff'
    @@ contrib/completion/git-completion.bash: _git_diff ()
      	fi
     +
     +	if [ ${#COMPREPLY[@]} -eq 0 ]; then
    -+		__git_complete_index_file
    ++		__git_complete_index_file ""
     +	fi
      }
      
3:  ba5dc6f164 ! 3:  d661a1a5dd completion: 'git diff' completes untracked paths as a last resort
    @@ Commit message
      ## contrib/completion/git-completion.bash ##
     @@ contrib/completion/git-completion.bash: _git_diff ()
      	if [ ${#COMPREPLY[@]} -eq 0 ]; then
    - 		__git_complete_index_file
    + 		__git_complete_index_file ""
      	fi
     +
     +	if [ ${#COMPREPLY[@]} -eq 0 ]; then
-- 
2.55.0-655-g8b87133eb9
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.