Skip to content

Commit

Permalink
completion: refactor diff_index wrappers
Browse files Browse the repository at this point in the history
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@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
  • Loading branch information
Felipe Contreras authored and Junio C Hamano committed Apr 27, 2013
1 parent 0afe8e9 commit f825972
Showing 1 changed file with 16 additions and 55 deletions.
71 changes: 16 additions & 55 deletions contrib/completion/git-completion.bash
Original file line number Diff line number Diff line change
Expand Up @@ -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).
Expand All @@ -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)"
Expand Down Expand Up @@ -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"
Expand All @@ -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
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit f825972

Please sign in to comment.