completion: improve existence check for pseudo-refs

Improve the existence check along the following lines:

  - Stop stripping the "ref :" prefix and compare to the expected value
    directly. This allows us to drop a now-unused variable that was
    previously leaking into the user's shell.

  - Mark the "head" variable as local so that we don't leak its value
    into the user's shell.

  - Stop manually handling the `-C $__git_repo_path` option, which the
    `__git ()` wrapper aleady does for us.

  - In simlar spirit, stop redirecting stderr, which is also handled by
    the wrapper already.

Suggested-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Patrick Steinhardt <ps@pks.im>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
This commit is contained in:
Patrick Steinhardt 2024-01-15 11:36:06 +01:00 committed by Junio C Hamano
parent 6807d3942c
commit 7b9cda2d3d

View file

@ -137,6 +137,7 @@ __git_eread ()
__git_pseudoref_exists ()
{
local ref=$1
local head
__git_find_repo_path
@ -146,9 +147,8 @@ __git_pseudoref_exists ()
# Bash builtins since executing Git commands are expensive on some
# platforms.
if __git_eread "$__git_repo_path/HEAD" head; then
b="${head#ref: }"
if [ "$b" == "refs/heads/.invalid" ]; then
__git -C "$__git_repo_path" rev-parse --verify --quiet "$ref" 2>/dev/null
if [ "$head" == "ref: refs/heads/.invalid" ]; then
__git rev-parse --verify --quiet "$ref"
return $?
fi
fi