]> git.ipfire.org Git - thirdparty/git.git/commitdiff
completion: improve existence check for pseudo-refs
authorPatrick Steinhardt <ps@pks.im>
Mon, 15 Jan 2024 10:36:06 +0000 (11:36 +0100)
committerJunio C Hamano <gitster@pobox.com>
Tue, 16 Jan 2024 17:18:21 +0000 (09:18 -0800)
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>
contrib/completion/git-completion.bash

index 06a9107449bca316340091492a5a253bf75c1611..d703e3e64ff5660b8f5c7fbdd1a4eaebe537081f 100644 (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