bda4633633
- 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).
135 lines
3.5 KiB
Bash
Executable file
135 lines
3.5 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
# DEBUG
|
|
#set -e -x
|
|
|
|
usage() {
|
|
printf '%s <repodir> <htmldir>\n' "$0"
|
|
exit 1
|
|
}
|
|
|
|
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>${name} - ${description}</title>
|
|
<link rel="stylesheet" type="text/css" href="style.css" />
|
|
</head>
|
|
<body>
|
|
<center>
|
|
<h1><img src="${relpath}logo.png" alt="" /> ${name}</h1>
|
|
<span class="desc">${description}</span><br/>
|
|
<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>
|
|
!__EOF__
|
|
}
|
|
|
|
footer() {
|
|
cat <<!__EOF__
|
|
</pre>
|
|
</body>
|
|
</html>
|
|
!__EOF__
|
|
}
|
|
|
|
# usage: repodir and htmldir must be set.
|
|
if test x"$1" = x"" || test x"$2" = x""; then
|
|
usage
|
|
fi
|
|
|
|
# make absolute path to htmldir.
|
|
htmldir="$(readlink -f $2)"
|
|
mkdir -p "${htmldir}"
|
|
|
|
# repodir must be a directory to go to.
|
|
cd "$1" || usage
|
|
|
|
# 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')"
|
|
|
|
# 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 --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"
|
|
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}"
|
|
done
|
|
# make page.
|
|
header > "${htmldir}/readme.html"
|
|
if test x"${readme}" != x""; then
|
|
cat "${readme}" >> "${htmldir}/readme.html"
|
|
else
|
|
echo "no README file found" >> "${htmldir}/readme.html"
|
|
fi
|
|
footer >> "${htmldir}/readme.html"
|
|
|
|
# license page
|
|
# find LICENSE file.
|
|
relpath=""
|
|
license=""
|
|
for f in LICENSE LICENSE.md; do
|
|
test -e "${f}" && license="${f}"
|
|
done
|
|
# make page.
|
|
header > "${htmldir}/license.html"
|
|
if test x"${readme}" != x""; then
|
|
cat "${license}" >> "${htmldir}/license.html"
|
|
else
|
|
echo "unknown license" >> "${htmldir}/license.html"
|
|
fi
|
|
footer >> "${htmldir}/license.html"
|
|
|
|
# stats (authors).
|
|
relpath=""
|
|
header > "${htmldir}/stats.html"
|
|
git shortlog -n -s >> "${htmldir}/stats.html"
|
|
footer >> "${htmldir}/stats.html"
|
|
|
|
# symlink to index page.
|
|
ln -sf "$indexpage" "${htmldir}/index.html"
|