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