stagit-gopher

static git page generator for gopher
git clone git://git.2f30.org/stagit-gopher.git
Log | Files | Refs | README | LICENSE

commit acd240004960dbbce6081b338ee4ed1775acfd1e
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Fri Dec  4 16:58:04 +0100

initial insertion

Diffstat:
README | 1+
TODO | 15+++++++++++++++
logo.png | 0
style.css | 23+++++++++++++++++++++++
urmoms | 117+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
5 files changed, 156 insertions(+), 0 deletions(-)
diff --git a/README b/README @@ -0,0 +1 @@ +to use urmom is quite easy... diff --git a/TODO b/TODO @@ -0,0 +1,15 @@ +- be smarter about changes (an existing commit can never change the diff page). +- add raw link to latest files: raw/file... +- add summary page? +- add diffstat to diff page? + and - lines summary? +- escape < > ' " etc, maybe even use CDATA ? +- shorter date format for logs.html page. +- speed up generating files. +- add stylesheet + 2f30/suckless logo. +- for files link to the commit but make the filename a link anchor. +- default to log view (stateless). +- link to lines in file view! / commit log? +- show all the tags and branches as list. +- show commits for all tags and branches??? +- no tarballs, snapshots and such. +- able to add link to git url: git://url... per project. diff --git a/logo.png b/logo.png Binary files differ. diff --git a/style.css b/style.css @@ -0,0 +1,23 @@ +body { + font-family: sans-serif; + color: #00ff00; + background-color: #000; +} + +h1 { + vertical-align: middle; +} + +a { + color: #00ff00; +} + +hr { + color: #00ff00; + background-color: #00ff00; + border-top: 1px solid #00ff00; +} + +pre { + font-family: monospace; +} diff --git a/urmoms b/urmoms @@ -0,0 +1,117 @@ +#!/bin/sh + +# DEBUG +#set -e -x + +baseurl="http://cow.codemadness.org/gitlog/" +# TODO: read .git/description. +description="sbase" +logdir="../gitlog" + +header() { + cat <<!__EOF__ +<!DOCTYPE HTML> +<html dir="ltr" lang="en"> +<head> +<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> +<meta http-equiv="Content-Language" content="en" /> +<title>${description}</title> +<base href="${baseurl}" /> +<link rel="stylesheet" type="text/css" href="style.css" /> +</head> +<body> +<center> +<h1><img src="logo.png" alt="" /> ${description}</h1> +<a href="index.html">Tree</a> | +<a href="log.html">Log</a> | +<a href="stats.html">Stats</a> | +<a href="readme.html">README</a> | +<a href="license.html">LICENSE</a> +</center> +<hr/> +<pre> +!__EOF__ +} + +footer() { + cat <<!__EOF__ +</pre> +<hr/> +<i><center>Powered by urmoms vibrator</center></i> +</body> +</html> +!__EOF__ +} + +mkdir -p "${logdir}" +firstcommit=$(git log | grep '^commit ' | tail -n 1 | cut -f 2 -d ' ') + +# make log per file. +# TODO: just link to commit/commit? save some space and time? +git ls-tree -r --name-only master | while read -r file; do + test -e "${logdir}/file/${file}.html" && continue + + d=$(dirname "${file}") + mkdir -p "${logdir}/file/${d}" + + header > "${logdir}/file/${file}.html" + git show "${firstcommit}"...master "${file}" | \ + sed -E 's@^commit (.*)$@commit <a href="commit/\1.html">\1</a>@g' >> "${logdir}/file/${file}.html" + footer >> "${logdir}/file/${file}.html" +done + +# make log with all commits. +header > "${logdir}/log.html" +printf '<table border="0">' >> "${logdir}/log.html" +git log --pretty='<tr><td align="right">%cD</td><td><a href="commit/%H.html">%H</a></td><td>%an</td><td>%s</td></tr>' >> "${logdir}/log.html" +printf '</table>' >> "${logdir}/log.html" +footer >> "${logdir}/log.html" + +# make diff for each commit (all files). +mkdir -p "${logdir}/commit" +git log --pretty='%H' | while read -r commit; do + test -e "${logdir}/commit/${commit}.html" && continue + header > "${logdir}/commit/${commit}.html" + git show "${commit}" >> "${logdir}/commit/${commit}.html" + footer >> "${logdir}/commit/${commit}.html" +done + +# make index with file links. +header >> "${logdir}/index.html" +git ls-tree -r master | sed -E 's@ (.*)$@ <a href="file/\1.html">\1</a>@g' >> "${logdir}/index.html" +footer >> "${logdir}/index.html" + +# readme page +# find README file. +readme="" +for f in README README.md readme.md; do + test -e "${f}" && readme="${f}" +done +# make page. +header > "${logdir}/readme.html" +if test x"${readme}" != x""; then + cat "${readme}" >> "${logdir}/readme.html" +else + echo "no README file found" >> "${logdir}/readme.html" +fi +footer >> "${logdir}/readme.html" + +# license page +# find LICENSE file. +license="" +for f in LICENSE LICENSE.md; do + test -e "${f}" && license="${f}" +done +# make page. +header > "${logdir}/license.html" +if test x"${readme}" != x""; then + cat "${license}" >> "${logdir}/license.html" +else + echo "unknown license" >> "${logdir}/license.html" +fi +footer >> "${logdir}/license.html" + +# stats (authors). +header > "${logdir}/stats.html" +git shortlog -n -s >> "${logdir}/stats.html" +footer >> "${logdir}/stats.html"