X-Git-Url: https://git.madduck.net/etc/zsh.git/blobdiff_plain/9344d99cba5549c443f50159044706a777e502bc..4e5f7ffb64e3e06024312c9d859eeee5c4504dd1:/.zsh/func/giturl diff --git a/.zsh/func/giturl b/.zsh/func/giturl index c85674a..171c4da 100755 --- a/.zsh/func/giturl +++ b/.zsh/func/giturl @@ -7,14 +7,21 @@ # # Copyright © 2010 martin f. krafft # Released under the terms of the Artistic Licence 2.0 +# Contributions from Yaroslav O. Halchenko # # Source repository: git://git.madduck.net/etc/zsh.git # -local remote; remote=$(git config --get remote.origin.url) +local branch remote remote_name +branch=$(git symbolic-ref -q HEAD); branch="${branch#refs/heads/}" +# Obtain remote which current branch tracks, origin if not known +remote_name=$(git config branch.$branch.remote || echo origin) +remote=$(git config --get remote.$remote_name.url) -local part gitweb_base oldstyle -oldstyle=0 +local part gitweb_base style commitkw +style=gitweb +commitkw=commitdiff # keyword for commit -- differ for github +argssep=: # separator for arguments of the query case "$remote" in madduck:pub/*|ssh://git.madduck.net/madduck/pub/*) gitweb_base=http://git.madduck.net/v @@ -22,16 +29,27 @@ case "$remote" in part="${part#ssh://git.madduck.net/madduck/pub/}" part="${part%.git}.git" ;; - debian:*|*://git.debian.org/git/*|*@git.debian.org/git/*) + debian:*|*://git.debian.org/git/*|*://alioth.debian.org/git/*|*@git.debian.org/git/*) gitweb_base=http://git.debian.org part="${remote#debian:}" part="${part#*://git.debian.org/git/}" + part="${part#*://alioth.debian.org/git/}" part="${part#*@git.debian.org/git/}" part="${part%.git}.git" - oldstyle=1 + style=gitweb_old + ;; + github:*|*://github.com/*|*@github.com[/:]*) + gitweb_base=http://github.com + part="${remote#github:}" + part="${part#*://github.com/}" + part="${part#*@github.com[:/]}" + part="${part%.git}" + style=github + commitkw=commit + argssep= ;; *) - echo >&2 "E: I do not know how to translate $REMOTE into a gitweb URL." + echo >&2 "E: I do not know how to translate $remote into a gitweb URL." return 1 ;; esac @@ -39,21 +57,23 @@ esac local hash hash=$(git rev-parse HEAD) -case "$oldstyle" in - 0) - echo "$gitweb_base/$part/commitdiff/$hash" +case "$style" in + gitweb|github) + echo "$gitweb_base/$part" + echo "$gitweb_base/$part/$commitkw/$hash" echo "$gitweb_base/$part/tree/HEAD" for i in $@; do - [ -f "$i" ] && echo "$gitweb_base/$part/blob/HEAD:/$i" - [ -d "$i" ] && echo "$gitweb_base/$part/tree/HEAD:/$i" + [ -f "$i" ] && echo "$gitweb_base/$part/blob/HEAD${argssep}/$i" + [ -d "$i" ] && echo "$gitweb_base/$part/tree/HEAD${argssep}/$i" done ;; - *) + gitweb_old) + echo "$gitweb_base/?p=$part" echo "$gitweb_base/?p=$part;a=commitdiff;h=$hash" echo "$gitweb_base/?p=$part;a=tree;h=HEAD" for i in $@; do - [ -f "$i" ] && echo "$gitweb_base/?p=$part;a=blob;h=HEAD;f=$i" - [ -d "$i" ] && echo "$gitweb_base/?p=$part;a=tree;h=HEAD:f=$i" + [ -f "$i" ] && echo "$gitweb_base/?p=$part;a=blob;hb=HEAD;f=$i" + [ -d "$i" ] && echo "$gitweb_base/?p=$part;a=tree;hb=HEAD;f=$i" done ;; esac