summaryrefslogtreecommitdiff
path: root/contrib/completion
diff options
context:
space:
mode:
authorLibravatar SZEDER Gábor <szeder.dev@gmail.com>2017-02-03 03:48:27 +0100
committerLibravatar Junio C Hamano <gitster@pobox.com>2017-02-03 22:18:41 -0800
commita958d40f4e7dbe02d4c85677c2616f20778b6aa7 (patch)
tree0b6da76e87c29b2453cf3a3a8426bc2c1ca4dc14 /contrib/completion
parentcompletion: consolidate silencing errors from git commands (diff)
downloadtgif-a958d40f4e7dbe02d4c85677c2616f20778b6aa7.tar.xz
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>
Diffstat (limited to 'contrib/completion')
-rw-r--r--contrib/completion/git-completion.bash32
1 files changed, 11 insertions, 21 deletions
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 01fc743a7f..cc9069dcb6 100644
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash
@@ -312,35 +312,25 @@ __git_ls_files_helper ()
# slash.
__git_index_files ()
{
- local dir="$(__gitdir)" root="${2-.}" file
-
- if [ -d "$dir" ]; then
- __git_ls_files_helper "$root" "$1" |
- while read -r file; do
- case "$file" in
- ?*/*) echo "${file%%/*}" ;;
- *) echo "$file" ;;
- esac
- done | sort | uniq
- fi
+ local root="${2-.}" file
+
+ __git_ls_files_helper "$root" "$1" |
+ while read -r file; do
+ case "$file" in
+ ?*/*) echo "${file%%/*}" ;;
+ *) echo "$file" ;;
+ esac
+ done | sort | uniq
}
__git_heads ()
{
- local dir="$(__gitdir)"
- if [ -d "$dir" ]; then
- __git for-each-ref --format='%(refname:short)' refs/heads
- return
- fi
+ __git for-each-ref --format='%(refname:short)' refs/heads
}
__git_tags ()
{
- local dir="$(__gitdir)"
- if [ -d "$dir" ]; then
- __git for-each-ref --format='%(refname:short)' refs/tags
- return
- fi
+ __git for-each-ref --format='%(refname:short)' refs/tags
}
# Lists refs from the local (by default) or from a remote repository.