completion: don't list 'HEAD' when trying refs completion outside of a repo
authorSZEDER Gábor <szeder.dev@gmail.com>
Fri, 3 Feb 2017 02:48:19 +0000 (03:48 +0100)
committerJunio C Hamano <gitster@pobox.com>
Sat, 4 Feb 2017 06:18:40 +0000 (22:18 -0800)
When refs completion is attempted while not in a git repository, the
completion script offers 'HEAD' erroneously.

Check early in __git_refs() that there is either a repository or a
remote to work on, and return early if neither is given.

Signed-off-by: SZEDER Gábor <szeder.dev@gmail.com>
Signed-off-by: Junio C Hamano <gitster@pobox.com>
contrib/completion/git-completion.bash
t/t9902-completion.sh

index af5ad52..19f6093 100644 (file)
@@ -346,7 +346,11 @@ __git_refs ()
        local list_refs_from=path remote="${1-}"
        local format refs pfx
 
-       if [ -n "$remote" ]; then
+       if [ -z "$remote" ]; then
+               if [ -z "$dir" ]; then
+                       return
+               fi
+       else
                if __git_is_configured_remote "$remote"; then
                        # configured remote takes precedence over a
                        # local directory with the same name
@@ -360,7 +364,7 @@ __git_refs ()
                fi
        fi
 
-       if [ "$list_refs_from" = path ] && [ -d "$dir" ]; then
+       if [ "$list_refs_from" = path ]; then
                case "$cur" in
                refs|refs/*)
                        format="refname"
index a201b52..5b4defa 100755 (executable)
@@ -599,7 +599,7 @@ test_expect_success '__git_refs - non-existing URL remote - full refs' '
        test_must_be_empty "$actual"
 '
 
-test_expect_failure '__git_refs - not in a git repository' '
+test_expect_success '__git_refs - not in a git repository' '
        (
                GIT_CEILING_DIRECTORIES="$ROOT" &&
                export GIT_CEILING_DIRECTORIES &&