[PATCH 3/9] completion: make refs completion consistent for local and remote repos
From: SZEDER Gábor <hidden>
Date: 2016-06-15 22:52:12
Subsystem:
the rest · Maintainer:
Linus Torvalds
For a local repository the __git_refs() completion helper function lists refs under 'refs/(tags|heads|remotes)/', plus some special refs like HEAD and ORIG_HEAD. For a remote repository, however, it lists all refs. Fix this inconsistency by specifying refs filter patterns for 'git ls-remote' to only list refs under 'refs/(tags|heads|remotes)/'. For now this makes it impossible to complete refs outside of 'refs/(tags|heads|remotes)/' in a remote repository, but a followup patch will resurrect that. Signed-off-by: SZEDER Gábor <redacted> --- contrib/completion/git-completion.bash | 6 ++---- 1 files changed, 2 insertions(+), 4 deletions(-)
diff --git a/contrib/completion/git-completion.bash b/contrib/completion/git-completion.bash
index 86de0bf4..6b5dc5cd 100755
--- a/contrib/completion/git-completion.bash
+++ b/contrib/completion/git-completion.bash@@ -615,13 +615,11 @@ __git_refs () fi return fi - for i in $(git ls-remote "$dir" 2>/dev/null); do + for i in $(git ls-remote "$dir" HEAD ORIG_HEAD 'refs/tags/*' 'refs/heads/*' 'refs/remotes/*' 2>/dev/null); do case "$is_hash,$i" in y,*) is_hash=n ;; n,*^{}) is_hash=y ;; - n,refs/tags/*) is_hash=y; echo "${i#refs/tags/}" ;; - n,refs/heads/*) is_hash=y; echo "${i#refs/heads/}" ;; - n,refs/remotes/*) is_hash=y; echo "${i#refs/remotes/}" ;; + n,refs/*) is_hash=y; echo "${i#refs/*/}" ;; n,*) is_hash=y; echo "$i" ;; esac done
--
1.7.7.187.ga41de