stagit

custom fork of stagit
Index Commits 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"