ref: 17e813bbac232ebb25273065f227674acbd97782
dir: /extra/gitls/
#!/bin/rc -e cd $1 shift rfork ne nl=' ' fn htcat { sed ' s/&/\&/g; s/</\</g; s/>/\>/g; s/"/\"/g; s/''/\'/g ' $* } fn resolveref { if(~ $refname HEAD) echo $refname if not if(test -d /mnt/git/branch/$refname/tree) echo branch/$refname if not if(test -d /mnt/git/object/$refname/tree) echo object/$refname if not status='bad ref' } echo ' <!DOCTYPE html> <html> <head> <style type="text/css"> body{ margin: 3em auto; max-width: 50em; font-family: sans-serif; } h1,h2{ font-size: 1.3em; color: #4c4c99; } h3{ font-size: 1em; color: #4c4c99; } #desc{ } #code{ background: #ffffea; border: #99994cff } </style> <link rel="alternate" type="application/rss+xml" href="feed.rss" title="rss"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>git webls</title> </head> <body> ' switch($1){ case 'list' rfork m echo '<h1>Repos</h1>' echo '<dl>' for(repo in `$nl{ls}){ if(test -d $repo/.git){ echo '<dt><a href="/git/'$repo'/HEAD/info.html">'$repo'</a></dt>' echo '<dd>' if(test -f $repo/.git/desc) htcat $repo/.git/desc if not echo 'code some guy wrote' echo '</dd>' } } echo '</dl>' case 'info' repo=$2 repodir=`{pwd}^/$repo/.git refname=$3 @{ cd $repo git/fs rfork m if(! ref=`{resolveref $refname}) echo '<b>invalid ref '$refname'</b>' cd /mnt/git/$ref/tree if(~ $file '') file='.' hash=`{cat /mnt/git/$ref/hash} echo '<h1><a href="/git/repos.html">Git</a>: <a href=/git/'$repo'/'$ref'/info.html>'$repo'</a></h1>' echo '<p>'$file' @ <a href='/git/$repo/$hash/f.html'>'$hash'</a>' echo '<pre id="desc">' htcat /mnt/git/object/$hash/msg echo '</pre>' echo '<p><a href='/git/$repo/$hash/f.html'>files</a>' echo '<pre id="code">' for(f in `$nl{ls}){ url=`$nl{echo -n $f/f.html | urlencode} fname=`$nl{echo -n $f | htcat} echo '<a href="'$url'">'$fname'</a>' } echo '</pre>' echo '<pre id="desc">' if(test -f $repodir/README) htcat $repodir/README if not if(test -f README) htcat README if not if (test -f README.md) htcat README.md if not if(test -f $repodir/desc) htcat $repodir/desc if not echo 'this repo has no description' echo '</pre>' } case 'view' repo=$2 repodir=`{pwd}^/$repo/.git refname=$3 file=$4 @{ cd $repo git/fs rfork m if(! ref=`{resolveref $refname}) echo '<b>invalid ref '$refname'</b>' cd /mnt/git/$ref/tree if(~ $file '') file='.' hash=`{cat /mnt/git/$ref/hash} echo '<h1><a href="/git/repos.html">Git</a>: <a href=/git/'$repo'/'$hash'/info.html>'$repo'</a></h1>' echo '<p>'$file' @ <a href='/git/$repo/$hash/f.html'>'$hash'</a>' echo '<pre id="desc">' htcat /mnt/git/object/$hash/msg echo '</pre>' echo '<pre id="code">' if(test -f $file){ htcat $file } if not if(test -d $file){ cd $file for(f in `$nl{ls}){ url=`$nl{echo -n $f/f.html | urlencode} fname=`$nl{echo -n $f | htcat} echo '<a href="'$url'">'$fname'</a>' } } echo '</pre>' } } echo '</body>' echo '</html>'