Support the browsing of other Git remotes/branches.

This commit is contained in:
Sorin Ionescu 2012-01-19 17:32:27 -05:00
parent 5bb9a3e4b5
commit 66c4aae59e
3 changed files with 53 additions and 4 deletions

View File

@ -182,6 +182,8 @@ alias ghc='git remote prune'
compdef _git ghc=git-remote
alias ghs='git remote show'
compdef _git ghs=git-remote
alias ghb='git-hub'
compdef _git-hub ghb=git-hub
# Stash (t)
alias gta='git stash apply'

View File

@ -0,0 +1,29 @@
#compdef git-hub
#autoload
local state remotes remote branches ret=1
_arguments -C -s -S \
'1::args:->remote' \
'2::args:->branch' && ret=0
case "$state" in
(remote)
remotes=($(
git config -l \
| grep 'remote\.[^.]*\.url' \
| cut -d'.' -f2))
_describe -t branch 'remotes' remotes && ret=0
;;
(branch)
remote="$words[(($CURRENT - 1))]"
branches=($(
git branch -a \
| grep "remotes/${remote}" \
| sed -e 's/[ \*]*//g' -e "s:remotes/${remote}/::g"
))
_describe -t branch 'branches' branches && ret=0
;;
esac
return $ret

View File

@ -1,12 +1,30 @@
# Open the GitHub repository in the browser.
local url=$(
local remote branches branch current_branch url
remote="${1:-origin}"
url=$(
git config -l \
| grep "remote.origin.url" \
| sed -En "s/remote.origin.url=(git|https?)(@|:\/\/)github.com(:|\/)(.+)\/(.+).git/https:\/\/github.com\/\4\/\5/p"
| grep "remote.${remote}.url" \
| sed -En "s/remote.${remote}.url=(git|https?)(@|:\/\/)github.com(:|\/)(.+)\/(.+).git/https:\/\/github.com\/\4\/\5/p"
)
branches=($(
git branch -a \
| grep "remotes/${remote}" \
| sed -e 's/[ \*]*//g' -e "s:remotes/${remote}/::g"
))
current_branch="$(git-branch)"
branch="${2:-master}"
if [[ -z "$2" ]]; then
if (( $branches[(I)$current_branch] != 0 )); then
branch="$current_branch"
else
branch='master'
fi
fi
if [[ -n "$url" ]]; then
url="${url}/tree/${$(git-branch):-master}"
url="${url}/tree/${branch}"
if (( $+commands[$BROWSER] )); then
"$BROWSER" "$url"