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>

SZEDER Gábor committed Feb 3, 2017 at 03:48 UTC a958d40f4e7dbe02d4c85677c2616f20778b6aa7
1 file changed +11 -21
contrib/completion/git-completion.bash
+11 -21
@@ -312,35 +312,25 @@ __git_ls_files_helper ()
312 # slash.
313 __git_index_files ()
314 {
315 - local dir="$(__gitdir)" root="${2-.}" file
316 -
317 - if [ -d "$dir" ]; then
318 - __git_ls_files_helper "$root" "$1" |
319 - while read -r file; do
320 - case "$file" in
321 - ?*/*) echo "${file%%/*}" ;;
322 - *) echo "$file" ;;
323 - esac
324 - done | sort | uniq
325 - fi
315 + local root="${2-.}" file
316 +
317 + __git_ls_files_helper "$root" "$1" |
318 + while read -r file; do
319 + case "$file" in
320 + ?*/*) echo "${file%%/*}" ;;
321 + *) echo "$file" ;;
322 + esac
323 + done | sort | uniq
324 }
325
326 __git_heads ()
327 {
330 - local dir="$(__gitdir)"
331 - if [ -d "$dir" ]; then
332 - __git for-each-ref --format='%(refname:short)' refs/heads
333 - return
334 - fi
328 + __git for-each-ref --format='%(refname:short)' refs/heads
329 }
330
331 __git_tags ()
332 {
339 - local dir="$(__gitdir)"
340 - if [ -d "$dir" ]; then
341 - __git for-each-ref --format='%(refname:short)' refs/tags
342 - return
343 - fi
333 + __git for-each-ref --format='%(refname:short)' refs/tags
334 }
335
336 # Lists refs from the local (by default) or from a remote repository.