Felipe Contreras <[email protected]> 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 <[email protected]>
> ---
> 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 [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html