completion: don't guard git executions with __gitdir()

Three completion functions, namely __git_index_files(), __git_heads()
and __git_tags(), first run __gitdir() and check that the path it
outputs exists, i.e. that there is a git repository, and run a git
command only if there is one.

After the previous changes in this series there are no further uses of
__gitdir()'s output in these functions besides those checks.  And
those checks are unnecessary, because we can just execute those git
commands outside of a repository and let them error out.  We don't
perform such a check in other places either.

Remove this check and the __gitdir() call from these functions,
sparing the fork()+exec() overhead of the command substitution and the
potential 'git rev-parse' execution.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
SZEDER Gábor 2017-02-03 03:48:27 +01:00 коммит произвёл Junio C Hamano
Родитель e15098a314
Коммит a958d40f4e
1 изменённых файлов: 10 добавлений и 20 удалений

Просмотреть файл

@ -312,35 +312,25 @@ __git_ls_files_helper ()
# slash. # slash.
__git_index_files () __git_index_files ()
{ {
local dir="$(__gitdir)" root="${2-.}" file local root="${2-.}" file
if [ -d "$dir" ]; then __git_ls_files_helper "$root" "$1" |
__git_ls_files_helper "$root" "$1" | while read -r file; do
while read -r file; do case "$file" in
case "$file" in ?*/*) echo "${file%%/*}" ;;
?*/*) echo "${file%%/*}" ;; *) echo "$file" ;;
*) echo "$file" ;; esac
esac done | sort | uniq
done | sort | uniq
fi
} }
__git_heads () __git_heads ()
{ {
local dir="$(__gitdir)" __git for-each-ref --format='%(refname:short)' refs/heads
if [ -d "$dir" ]; then
__git for-each-ref --format='%(refname:short)' refs/heads
return
fi
} }
__git_tags () __git_tags ()
{ {
local dir="$(__gitdir)" __git for-each-ref --format='%(refname:short)' refs/tags
if [ -d "$dir" ]; then
__git for-each-ref --format='%(refname:short)' refs/tags
return
fi
} }
# Lists refs from the local (by default) or from a remote repository. # Lists refs from the local (by default) or from a remote repository.