+++ /dev/null
-#!/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 <madduck@madduck.net>
-# Released under the terms of the Artistic Licence 2.0
-# Contributions from Yaroslav O. Halchenko <debian@onerussian.com>
-#
-# Source repository: http://git.madduck.net/v/etc/zsh.git
-#
-
-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 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
- part="${remote#madduck:pub/}"
- part="${part#ssh://git.madduck.net/madduck/pub/}"
- part="${part%.git}.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"
- 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."
- return 1
- ;;
-esac
-
-local hash
-hash=$(git rev-parse HEAD)
-
-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${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;hb=HEAD;f=$i"
- [ -d "$i" ] && echo "$gitweb_base/?p=$part;a=tree;hb=HEAD;f=$i"
- done
- ;;
-esac