diff options
author | SZEDER Gábor <szeder.dev@gmail.com> | 2017-02-03 05:48:27 +0300 |
---|---|---|
committer | Junio C Hamano <gitster@pobox.com> | 2017-02-04 09:18:41 +0300 |
commit | a958d40f4e7dbe02d4c85677c2616f20778b6aa7 (patch) | |
tree | 0b6da76e87c29b2453cf3a3a8426bc2c1ca4dc14 /contrib | |
parent | e15098a314aa15b207bb08a11058855baaedbc37 (diff) |
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')
-rw-r--r-- | contrib/completion/git-completion.bash | 32 |
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. |