Re: [PATCH v2 5/9] completion: refactor diff_index wrappers

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Felipe Contreras <felipe.contreras@xxxxxxxxx> writes:

> At the end of the day what we really need is to find out the files that
> have been staged, or modified, because those files are the ones that
> make sense to pass as arguments to 'git commit'.
>
> We need diff-index to find those out, since 'git ls-files' doesn't do
> that.
>
> But we don't need wrappers and wrappers basically identical to the ones
> used for 'git ls-files', when we can pretend it receives a --committable
> option that would return what we need.
>
> That way, we can remove a bunch of code without any functional changes.
>
> Signed-off-by: Felipe Contreras <felipe.contreras@xxxxxxxxx>
> ---
>  contrib/completion/git-completion.bash | 71 ++++++++--------------------------
>  1 file changed, 16 insertions(+), 55 deletions(-)

Nice line reduction.


>
> diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
> index 7f1ebe4..2561265 100644
> --- a/contrib/completion/git-completion.bash
> +++ b/contrib/completion/git-completion.bash
> @@ -297,30 +297,25 @@ __git_index_file_list_filter ()
>  	__git_index_file_list_filter_bash
>  }
>  
> -# Execute git ls-files, returning paths relative to the directory
> -# specified in the first argument, and using the options specified in
> -# the second argument.
> +# Execute 'git ls-files', unless the --committable option is specified, in
> +# which case it runs 'git diff-index' to find out the files that can be
> +# committed.  It return paths relative to the directory specified in the first
> +# argument, and using the options specified in the second argument.
>  __git_ls_files_helper ()
>  {
>  	(
>  		test -n "${CDPATH+set}" && unset CDPATH
> -		# NOTE: $2 is not quoted in order to support multiple options
> -		cd "$1" && git ls-files --exclude-standard $2
> +		cd "$1"
> +		if [ "$2" == "--committable" ]; then
> +			git diff-index --name-only --relative HEAD
> +		else
> +			# NOTE: $2 is not quoted in order to support multiple options
> +			git ls-files --exclude-standard $2
> +		fi
>  	) 2>/dev/null
>  }
>  
>  
> -# Execute git diff-index, returning paths relative to the directory
> -# specified in the first argument, and using the tree object id
> -# specified in the second argument.
> -__git_diff_index_helper ()
> -{
> -	(
> -		test -n "${CDPATH+set}" && unset CDPATH
> -		cd "$1" && git diff-index --name-only --relative "$2"
> -	) 2>/dev/null
> -}
> -
>  # __git_index_files accepts 1 or 2 arguments:
>  # 1: Options to pass to ls-files (required).
>  # 2: A directory path (optional).
> @@ -337,22 +332,6 @@ __git_index_files ()
>  	fi
>  }
>  
> -# __git_diff_index_files accepts 1 or 2 arguments:
> -# 1) The id of a tree object.
> -# 2) A directory path (optional).
> -#    If provided, only files within the specified directory are listed.
> -#    Sub directories are never recursed.  Path must have a trailing
> -#    slash.
> -__git_diff_index_files ()
> -{
> -	local dir="$(__gitdir)" root="${2-.}"
> -
> -	if [ -d "$dir" ]; then
> -		__git_diff_index_helper "$root" "$1" | __git_index_file_list_filter |
> -			sort | uniq
> -	fi
> -}
> -
>  __git_heads ()
>  {
>  	local dir="$(__gitdir)"
> @@ -550,8 +529,10 @@ __git_complete_revlist_file ()
>  }
>  
>  
> -# __git_complete_index_file requires 1 argument: the options to pass to
> -# ls-file
> +# __git_complete_index_file requires 1 argument:
> +# 1: the options to pass to ls-file
> +#
> +# The exception is --committable, which finds the files appropriate commit.
>  __git_complete_index_file ()
>  {
>  	local pfx cur_="$cur"
> @@ -570,26 +551,6 @@ __git_complete_index_file ()
>  	esac
>  }
>  
> -# __git_complete_diff_index_file requires 1 argument: the id of a tree
> -# object
> -__git_complete_diff_index_file ()
> -{
> -	local pfx cur_="$cur"
> -
> -	case "$cur_" in
> -	?*/*)
> -		pfx="${cur_%/*}"
> -		cur_="${cur_##*/}"
> -		pfx="${pfx}/"
> -
> -		__gitcomp_file "$(__git_diff_index_files "$1" "$pfx")" "$pfx" "$cur_"
> -		;;
> -	*)
> -		__gitcomp_file "$(__git_diff_index_files "$1")" "" "$cur_"
> -		;;
> -	esac
> -}
> -
>  __git_complete_file ()
>  {
>  	__git_complete_revlist_file
> @@ -1211,7 +1172,7 @@ _git_commit ()
>  	esac
>  
>  	if git rev-parse --verify --quiet HEAD >/dev/null; then
> -		__git_complete_diff_index_file "HEAD"
> +		__git_complete_index_file "--committable"
>  	else
>  		# This is the first commit
>  		__git_complete_index_file "--cached"
--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]