ref: 2f4a9aee3262d3c876851b803b1aeb2ad5376cc1
parent: ea71c33594b15937ba22faab3cf2905d3a138594
author: phil9 <telephil9@gmail.com>
date: Mon Feb 1 00:01:48 EST 2021
split common functions in a separate file
--- /dev/null
+++ b/common.rc
@@ -1,0 +1,187 @@
+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'
+}
+
+fn repons {
+ mntgen
+ mntgen /mnt/mnt
+ ramfs -m /mnt/tmp
+ bind /bin /mnt/bin
+ bind /rc /mnt/rc
+ bind /sys /mnt/sys
+ bind -c /env /mnt/env
+ bind /dev /mnt/dev
+ bind $1/$2 /mnt/$repo
+ bind /mnt /
+ cd /mnt/$repo
+ git/fs
+ mntgen /mnt/scratch
+ rfork m
+}
+
+fn formatcommit {
+ puser=$1
+ prepo=$2
+ phash=$3
+
+ message=`{htcat /mnt/git/object/$phash/msg | sed 1q}
+ date=`{date -t `{mtime /mnt/git/object/$phash/msg | awk '{print $1}'}}
+ author=`"{htcat /mnt/git/object/$phash/author | awk '{print $1}'}
+ shorthash=`{echo $phash | awk '{print substr($0, 0, 8)}'}
+ echo ' <div id="commit">
+ <a href=/git/'$puser/$prepo/$phash'/commit.html>'$shorthash'</a>
+ – '$author' – '$"date'
+ <pre>'$"message'</pre>
+ </div>'
+}
+
+fn shortlog {
+ puser=$1
+ prepo=$2
+ pref=$3
+ pcount=$4
+
+ d=`{pwd}
+ commithash=`{cat /mnt/git/$pref/hash | sed 1q}
+ count=()
+ while (! ~ $#commithash 0 && ! ~ $#count $pcount) {
+ count=($count 1)
+ formatcommit $puser $prepo $commithash
+ echo '<br/>'
+ commithash=`{cat /mnt/git/object/$commithash/parent | sed 1q}
+ }
+ if(! ~ $"commithash '')
+ echo '<a href="/git/'$puser/$prepo/$commithash'/log.html">Next</a>'
+ cd $d
+}
+
+fn difftohtml {
+ awk '
+ function printpre(id, text) { printf "<pre id='%s'>%s</pre>", id, text }
+ BEGIN { started = 0; diff = 0; }
+ /^---$/ { diff = 1; next }
+ /^diff .*$/ && diff && !started { started = 1; next }
+ /^\+\+\+ .*$/ && started { printpre("files", $0); next }
+ /^--- .*$/ && started { printpre("files", $0); next }
+ /^@@ .*$/ && started { printpre("sep", $0); next }
+ /^\+.*$/ && started { printpre("add", $0); next }
+ /^-.*$/ && started { printpre("del", $0); next }
+ started { printpre("ctx", $0); next }
+ '
+}
+
+fn prelude {
+ echo '
+ <!DOCTYPE html>
+ <html>
+
+ <head>
+ <style type="text/css">
+ body{
+ padding: 3em;
+ margin: auto;
+ min-width: 50em;
+ width: min-content;
+ font-family: sans-serif;
+ tab-space: 8;
+ }
+ h1{
+ font-size: 1.5em;
+ color: #4c4c99;
+ }
+ h2{
+ font-size: 1.3em;
+ color: #4c4c99;
+ }
+ h3{
+ font-size: 1em;
+ color: #4c4c99;
+ }
+
+ #code{
+ background: #ffffea;
+ border: 1px solid #99994c;
+ overflow: auto;
+ padding: 4px;
+ }
+
+ #commit{
+ font-family: sans-serif;
+ background: #eeeeee;
+ border: 1px solid #cccccc;
+ padding: 4px;
+ }
+
+ #diff{
+ font-family: monospace;
+ border: 2px solid #efefef;
+ }
+
+ #diff #files{
+ background: #efefef;
+ margin: 0em;
+ }
+
+ #diff #sep{
+ background: #eaffff;
+ margin: 0em;
+ }
+
+ #diff #add{
+ background: #e6ffed;
+ margin: 0em;
+ }
+
+ #diff #del{
+ background: #ffeef0;
+ margin: 0em;
+ }
+ #diff #ctx{
+ margin: 0em;
+ }
+ </style>
+ <link rel="alternate" type="application/rss+xml" href="feed.rss" title="rss">
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
+ <meta name="viewport" content="width=device-width,initial-scale=1">
+ <title>Shithub: '$"1'</title>
+ </head>
+ <body>
+ '
+}
+
+fn user_prelude {
+ puser=$1
+ prepo=$2
+ phash=$3
+
+ prelude $prepo
+ echo ' <h1><a href="/git/repos.html">Git</a>:
+ <a href="/git/'$puser/$prepo/$phash'/info.html">'$prepo'</a></h1>
+ <div id="linkbar">
+ <a href="/git/'$puser/$prepo/$phash'/info.html">Info</a>
+ •
+ <a href="/git/'$puser/$prepo/$phash'/files.html">Files</a>
+ •
+ <a href="/git/'$puser/$prepo/$phash'/log.html">Log</a>
+ </div>'
+}
--- a/mkfile
+++ b/mkfile
@@ -2,11 +2,16 @@
shithub\
newrepo
+LIBFILES=\
+ common.rc
+
WEBFILES=\
index.html\
toilet.jpg
install:
+ mkdir -p /sys/lib/shithub
+ cp $LIBFILES /sys/lib/shithub
cp $RCFILES /rc/bin
cp $WEBFILES /usr/web
cp gitrules /sys/lib/tcp80
--- a/shithub
+++ b/shithub
@@ -1,5 +1,7 @@
#!/bin/rc -e
+. /sys/lib/shithub/common.rc
+
cd $1
shift
@@ -6,191 +8,6 @@
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'
-}
-
-fn repons {
- mntgen
- mntgen /mnt/mnt
- ramfs -m /mnt/tmp
- bind /bin /mnt/bin
- bind /rc /mnt/rc
- bind /sys /mnt/sys
- bind -c /env /mnt/env
- bind /dev /mnt/dev
- bind $1/$2 /mnt/$repo
- bind /mnt /
- cd /mnt/$repo
- git/fs
- mntgen /mnt/scratch
- rfork m
-}
-
-fn formatcommit {
- puser=$1
- prepo=$2
- phash=$3
-
- message=`{htcat /mnt/git/object/$phash/msg | sed 1q}
- date=`{date -t `{mtime /mnt/git/object/$phash/msg | awk '{print $1}'}}
- author=`"{htcat /mnt/git/object/$phash/author | awk '{print $1}'}
- shorthash=`{echo $phash | awk '{print substr($0, 0, 8)}'}
- echo ' <div id="commit">
- <a href=/git/'$puser/$prepo/$phash'/commit.html>'$shorthash'</a>
- – '$author' – '$"date'
- <pre>'$"message'</pre>
- </div>'
-}
-
-fn shortlog {
- puser=$1
- prepo=$2
- pref=$3
- pcount=$4
-
- d=`{pwd}
- commithash=`{cat /mnt/git/$pref/hash | sed 1q}
- count=()
- while (! ~ $#commithash 0 && ! ~ $#count $pcount) {
- count=($count 1)
- formatcommit $puser $prepo $commithash
- echo '<br/>'
- commithash=`{cat /mnt/git/object/$commithash/parent | sed 1q}
- }
- if(! ~ $"commithash '')
- echo '<a href="/git/'$puser/$prepo/$commithash'/log.html">Next</a>'
- cd $d
-}
-
-fn difftohtml {
- awk '
- function printpre(id, text) { printf "<pre id='%s'>%s</pre>", id, text }
- BEGIN { started = 0; diff = 0; }
- /^---$/ { diff = 1; next }
- /^diff .*$/ && diff && !started { started = 1; next }
- /^\+\+\+ .*$/ && started { printpre("files", $0); next }
- /^--- .*$/ && started { printpre("files", $0); next }
- /^@@ .*$/ && started { printpre("sep", $0); next }
- /^\+.*$/ && started { printpre("add", $0); next }
- /^-.*$/ && started { printpre("del", $0); next }
- started { printpre("ctx", $0); next }
- '
-}
-
-fn prelude {
- echo '
- <!DOCTYPE html>
- <html>
-
- <head>
- <style type="text/css">
- body{
- padding: 3em;
- margin: auto;
- min-width: 50em;
- width: min-content;
- font-family: sans-serif;
- tab-space: 8;
- }
- h1{
- font-size: 1.5em;
- color: #4c4c99;
- }
- h2{
- font-size: 1.3em;
- color: #4c4c99;
- }
- h3{
- font-size: 1em;
- color: #4c4c99;
- }
-
- #code{
- background: #ffffea;
- border: 1px solid #99994c;
- overflow: auto;
- padding: 4px;
- }
-
- #commit{
- font-family: sans-serif;
- background: #eeeeee;
- border: 1px solid #cccccc;
- padding: 4px;
- }
-
- #diff{
- font-family: monospace;
- border: 2px solid #efefef;
- }
-
- #diff #files{
- background: #efefef;
- margin: 0em;
- }
-
- #diff #sep{
- background: #eaffff;
- margin: 0em;
- }
-
- #diff #add{
- background: #e6ffed;
- margin: 0em;
- }
-
- #diff #del{
- background: #ffeef0;
- margin: 0em;
- }
- #diff #ctx{
- margin: 0em;
- }
- </style>
- <link rel="alternate" type="application/rss+xml" href="feed.rss" title="rss">
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <meta name="viewport" content="width=device-width,initial-scale=1">
- <title>Shithub: '$"1'</title>
- </head>
- <body>
- '
-}
-
-fn user_prelude {
- puser=$1
- prepo=$2
- phash=$3
-
- prelude $prepo
- echo ' <h1><a href="/git/repos.html">Git</a>:
- <a href="/git/'$puser/$prepo/$phash'/info.html">'$prepo'</a></h1>
- <div id="linkbar">
- <a href="/git/'$puser/$prepo/$phash'/info.html">Info</a>
- •
- <a href="/git/'$puser/$prepo/$phash'/files.html">Files</a>
- •
- <a href="/git/'$puser/$prepo/$phash'/log.html">Log</a>
- </div>'
-}
switch($1){
case 'list'