]> git.donarmstrong.com Git - zsh.git/blobdiff - .zsh/func/giturl
oldstyle fixes
[zsh.git] / .zsh / func / giturl
index f001308b123f1a99551b0eabcfe63143839caa06..8f6233cb6308b76c655cf0a2e0d34c7eb12e37b1 100755 (executable)
@@ -2,7 +2,8 @@
 #
 # func/giturl
 #
-# a convenient way to display the gitweb URL of a commit-ish
+# A convenient way to display the gitweb URL of a commit-ish, as well as the
+# base URL and tree. Also for each argument, the tree or blob URL is printed.
 #
 # Copyright © 2010 martin f. krafft <madduck@madduck.net>
 # Released under the terms of the Artistic Licence 2.0
 # Source repository: git://git.madduck.net/etc/zsh.git
 #
 
-local GITWEB_BASE
-GITWEB_BASE=http://git.madduck.net/v
+local remote; remote=$(git config --get remote.origin.url)
 
-local REMOTE
-REMOTE=$(git config --get remote.origin.url)
-
-local part
-case "$REMOTE" in
-  madduck:pub/*)
-    part="${REMOTE#madduck:pub/}"
+local part gitweb_base oldstyle
+oldstyle=0
+case "$remote" in
+  madduck:pub/*|ssh://git.madduck.net/madduck/pub/*)
+    gitweb_base=http://git.madduck.net/v
+    part="${remote#madduck:pub/}"
+    part="${part#ssh://git.madduck.net/madduck/pub/}"
+    part="${part%.git}.git"
+    ;;
+  debian:*|*://git.debian.org/git/*|*@git.debian.org/git/*)
+    gitweb_base=http://git.debian.org
+    part="${remote#debian:}"
+    part="${part#*://git.debian.org/git/}"
+    part="${part#*@git.debian.org/git/}"
     part="${part%.git}.git"
+    oldstyle=1
     ;;
   *)
     echo >&2 "E: I do not know how to translate $REMOTE into a gitweb URL."
@@ -28,5 +36,24 @@ case "$REMOTE" in
     ;;
 esac
 
-HASH=$(git rev-parse HEAD)
-echo $GITWEB_BASE/$part/commitdiff/$HASH
+local hash
+hash=$(git rev-parse HEAD)
+
+case "$oldstyle" in
+  0)
+    echo "$gitweb_base/$part/commitdiff/$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"
+    done
+    ;;
+  *)
+    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;hb=HEAD;f=$i"
+      [ -d "$i" ] && echo "$gitweb_base/?p=$part;a=tree;hb=HEAD;f=$i"
+    done
+    ;;
+esac