#!/bin/sh # # func/giturl # # 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 # Released under the terms of the Artistic Licence 2.0 # # Source repository: git://git.madduck.net/etc/zsh.git # local remote; remote=$(git config --get remote.origin.url) 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." return 1 ;; esac local hash hash=$(git rev-parse HEAD) case "$oldstyle" in 0) echo "$gitweb_base/$part" 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" 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