stagit

static git page generator
git clone git://git.codemadness.org/stagit
Log | Files | Refs | README | LICENSE

commit bda4633633a0701bbd2f7861674a8e612d961fb7
parent 5734f7aca10abefa680497a5cb0bdaf538b6476a
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sat,  5 Dec 2015 00:37:31 +0100

improvements:

- nicer file list.
- relative urls, dont use base href.
- add link to plain files, files should be checked out in "file" dir.
- strip .git from bare repos.
- simplify part of commit per file, just link to commit + file anchor (WIP).

Diffstat:
Murmoms | 74++++++++++++++++++++++++++++++++------------------------------------------
1 file changed, 32 insertions(+), 42 deletions(-)

diff --git a/urmoms b/urmoms @@ -16,18 +16,17 @@ header() { <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="Content-Language" content="en" /> <title>${name} - ${description}</title> -<base href="${baseurl}" /> <link rel="stylesheet" type="text/css" href="style.css" /> </head> <body> <center> -<h1><img src="logo.png" alt="" /> ${name}</h1> +<h1><img src="${relpath}logo.png" alt="" /> ${name}</h1> <span class="desc">${description}</span><br/> -<a href="log.html">Log</a> | -<a href="files.html">Files</a> | -<a href="stats.html">Stats</a> | -<a href="readme.html">README</a> | -<a href="license.html">LICENSE</a> +<a href="${relpath}log.html">Log</a> | +<a href="${relpath}files.html">Files</a> | +<a href="${relpath}stats.html">Stats</a> | +<a href="${relpath}readme.html">README</a> | +<a href="${relpath}license.html">LICENSE</a> </center> <hr/> <pre> @@ -37,8 +36,6 @@ header() { footer() { cat <<!__EOF__ </pre> -<hr/> -<i><center>Powered by urmoms vibrator</center></i> </body> </html> !__EOF__ @@ -56,58 +53,49 @@ mkdir -p "${htmldir}" # repodir must be a directory to go to. cd "$1" || usage -# project name -# TODO: if bare repo just remove .git suffix? -name=$(basename "$(pwd)") +# default index page (symlink). +indexpage="log.html" + +# project name, if bare repo remove .git suffix. +name=$(basename "$(pwd)" ".git") # read .git/description. description="" test -f ".git/description" && description="$(cat '.git/description')" -# TODO: make configurable. -baseurl="http://cow.codemadness.org/gitlog/" - -indexpage="log.html" - -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 "${htmldir}/file/${file}.html" && continue - - d=$(dirname "${file}") - mkdir -p "${htmldir}/file/${d}" - - header > "${htmldir}/file/${file}.html" - git show "${firstcommit}"...master "${file}" | \ - sed -E 's@^commit (.*)$@commit <a href="commit/\1.html">\1</a>@g' >> "${htmldir}/file/${file}.html" - footer >> "${htmldir}/file/${file}.html" -done - -# make log with all commits. -header > "${htmldir}/log.html" -printf '<table border="0">' >> "${htmldir}/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>' >> "${htmldir}/log.html" -printf '</table>' >> "${htmldir}/log.html" -footer >> "${htmldir}/log.html" - # make diff for each commit (all files). +relpath="../" mkdir -p "${htmldir}/commit" git log --pretty='%H' | while read -r commit; do test -e "${htmldir}/commit/${commit}.html" && continue + header > "${htmldir}/commit/${commit}.html" - git show "${commit}" >> "${htmldir}/commit/${commit}.html" + git show --pretty=full "${commit}" | \ + sed -E 's@^commit (.*)$@commit <a href="'${relpath}'commit/\1.html">\1</a>@g' >> "${htmldir}/commit/${commit}.html" footer >> "${htmldir}/commit/${commit}.html" done +# make log with all commits. +relpath="" +header > "${htmldir}/log.html" +printf '<table border="0">' >> "${htmldir}/log.html" +git log --pretty='<tr><td align="right">%cr</td><td><a href="'${relpath}'commit/%H.html">%H</a></td><td>%an</td><td>%s</td></tr>' >> "${htmldir}/log.html" +printf '</table>' >> "${htmldir}/log.html" +footer >> "${htmldir}/log.html" + # make index with file links. +relpath="" header >> "${htmldir}/files.html" -git ls-tree -r master | sed -E 's@ (.*)$@ <a href="file/\1.html">\1</a>@g' >> "${htmldir}/files.html" +printf '<table><tr><td><b>Mode</b></td><td><b>Name</b></td><td><b>Size</b></td><td></td></tr>' >> "${htmldir}/files.html" +git ls-tree -r -l master | while read -r mode type object size file; do + git log -1 --pretty='<tr><td>'${mode}'</td><td><a href="'${relpath}'commit/%H.html#file-'${file}'">'${file}'</a></td><td>'${size}'</td><td><a href="file/'${file}'">[plain]</a></td></tr>' "${file}" +done >> "${htmldir}/files.html" +printf '</table>' >> "${htmldir}/files.html" footer >> "${htmldir}/files.html" # readme page # find README file. +relpath="" readme="" for f in README README.md readme.md; do test -e "${f}" && readme="${f}" @@ -123,6 +111,7 @@ footer >> "${htmldir}/readme.html" # license page # find LICENSE file. +relpath="" license="" for f in LICENSE LICENSE.md; do test -e "${f}" && license="${f}" @@ -137,6 +126,7 @@ fi footer >> "${htmldir}/license.html" # stats (authors). +relpath="" header > "${htmldir}/stats.html" git shortlog -n -s >> "${htmldir}/stats.html" footer >> "${htmldir}/stats.html"