Support bash completion of refs/remote.
Now that people are really likely to start using separate remotes (due to the default in git-clone changing) we should support ref completion for these refs in as many commands as possible. While we are working on this routine we should use for-each-ref to obtain a list of local refs, as this should run faster than peek-remote as it does not need to dereference tag objects in order to produce the list of refs back to us. It should also be more friendly to users of StGIT as we won't generate a list of the StGIT metadata refs. Signed-off-by: Shawn O. Pearce <spearce@spearce.org> Signed-off-by: Junio C Hamano <junkio@cox.net>
This commit is contained in:
parent
6e31b866e4
commit
35e65ecca7
@ -47,16 +47,26 @@ __git_refs ()
|
||||
{
|
||||
local cmd i is_hash=y dir="${1:-$(__gitdir)}"
|
||||
if [ -d "$dir" ]; then
|
||||
cmd=git-peek-remote
|
||||
else
|
||||
cmd=git-ls-remote
|
||||
if [ -e "$dir/HEAD" ]; then echo HEAD; fi
|
||||
for i in $(git --git-dir="$dir" \
|
||||
for-each-ref --format='%(refname)' \
|
||||
refs/tags refs/heads refs/remotes); do
|
||||
case "$i" in
|
||||
refs/tags/*) echo "${i#refs/tags/}" ;;
|
||||
refs/heads/*) echo "${i#refs/heads/}" ;;
|
||||
refs/remotes/*) echo "${i#refs/remotes/}" ;;
|
||||
*) echo "$i" ;;
|
||||
esac
|
||||
done
|
||||
return
|
||||
fi
|
||||
for i in $($cmd "$dir" 2>/dev/null); do
|
||||
for i in $(git-ls-remote "$dir" 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,*) is_hash=y; echo "$i" ;;
|
||||
esac
|
||||
done
|
||||
|
Loading…
Reference in New Issue
Block a user