shithub: shithub

Download patch

ref: 4f55ee44dd0b402ff44b6ac47a088b334d6c0301
parent: 31bbd02bc477e884f96bef9abc6cd6381fd159c5
author: phil9 <telephil9@gmail.com>
date: Thu Feb 4 05:14:51 EST 2021

implement RSS feed for latest changes

	log page now shows a link to get an RSS feed for
	the last 10 commits

--- /dev/null
+++ b/feed
@@ -1,0 +1,77 @@
+#!/bin/rc -e
+
+. /sys/lib/shithub/common.rc
+
+fn rssitem {
+	puser=$1
+	prepo=$2
+	phash=$3
+
+	d=`{pwd}
+	guid='http://shithub.us/git/'$puser/$prepo/$phash'/commit.html'
+	message=`{htcat /mnt/git/object/$phash/msg | sed 1q}
+	description=`''{htcat /mnt/git/object/$phash/msg}
+	date=`{date -m `{mtime /mnt/git/object/$phash/msg |awk '{print $1}'}}
+	author=`"{htcat /mnt/git/object/$phash/author |awk '{print $1}'}
+	echo '	<item>
+		<guid>'$"guid'</guid>
+		<pubDate>'$"date'</pubDate>
+		<title>'$"message'</title>
+		<author>'$"author'</author>
+		<link>'$guid'</link>
+		<description><![CDATA[ <pre>'$description'</pre> ]]></description>
+		</item>'		
+	cd $d
+}
+
+cd $1
+shift
+
+rfork ne
+nl='
+'
+
+gituser=$1
+repo=$2
+refname=$3
+
+repons $gituser $repo
+repodir=/mnt/$repo/.git
+if(! ref=`{resolveref $refname}){
+	echo '<b>invalid ref '$refname'</b>'
+	exit
+}
+
+if(test -f /mnt/git/$ref/hash)
+	hash=`{cat /mnt/git/$ref/hash}
+if not
+	hash=$ref
+
+echo '<?xml version="1.0" encoding="utf-8" ?>
+	<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
+	<channel>
+	<atom:link href="http://shithub.us/git/'$gituser/$repo/'HEAD/log.rss" rel="self" type="application/rss+xml" />
+	<title>'$gituser/$repo' git log</title>
+	<link>http://shithub.us/git/'$gituser/$repo/'HEAD/log.html</link>
+	<description>shithub git/log for repository '$gituser/$repo'</description>
+	<lastBuildDate>'`"{date -m}'</lastBuildDate>
+	<language>en-us</language>
+'
+
+if(! test -d /mnt/git/$ref/tree){
+	echo '	</channel>
+		</rss>
+	'
+	exit
+}
+cd /mnt/git/$ref/tree
+commithash=`{cat /mnt/git/HEAD/hash | sed 1q}
+count=()
+while (! ~ $#commithash 0 && ! ~ $#count 10) {
+	count=($count 1)
+	rssitem $gituser $repo $commithash
+	commithash=`{cat /mnt/git/object/$commithash/parent | sed 1q}
+}
+echo '	</channel>
+	</rss>
+'
--- a/gitrules
+++ b/gitrules
@@ -1,9 +1,10 @@
-/repos.html					/bin/shithub /usr/git list
-/([^'/]+)/([^'/]+)/([^'/]+)/info.html		/bin/shithub /usr/git info '\1' '\2' '\3'
-/([^'/]+)/([^'/]+)/([^'/]+)/files.html		/bin/shithub /usr/git files '\1' '\2' '\3'
-/([^'/]+)/([^'/]+)/([^'/]+)/snap.tar.gz		/bin/shithub /usr/git tar '\1' '\2' '\3'
-/([^'/]+)/([^'/]+)/([^'/]+)/(([^']+)/)?f.html	/bin/shithub /usr/git view '\1' '\2' '\3' '\5'
-/([^'/]+)/([^'/]+)/([^'/]+)/(([^']+)/)?raw	/bin/shithub /usr/git viewraw '\1' '\2' '\3' '\5'
-/([^'/]+)/([^'/]+)/([^'/]+)/log.html		/bin/shithub /usr/git log '\1' '\2' '\3'
-/([^'/]+)/([^'/]+)/([^'/]+)/commit.html		/bin/shithub /usr/git show '\1' '\2' '\3'
-/([^'/]+)/([^'/]+)/([^'/]+)/patch		/bin/shithub /usr/git patch '\1' '\2' '\3'
+/repos.html					/bin/shithub/list	/usr/git
+/([^'/]+)/([^'/]+)/([^'/]+)/info.html		/bin/shithub/info	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/files.html		/bin/shithub/files	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/snap.tar.gz		/bin/shithub/tar	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/(([^']+)/)?f.html	/bin/shithub/view	/usr/git '\1' '\2' '\3' '\5'
+/([^'/]+)/([^'/]+)/([^'/]+)/(([^']+)/)?raw	/bin/shithub/viewraw	/usr/git '\1' '\2' '\3' '\5'
+/([^'/]+)/([^'/]+)/([^'/]+)/log.html		/bin/shithub/log	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/commit.html		/bin/shithub/show	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/patch		/bin/shithub/patch	/usr/git '\1' '\2' '\3'
+/([^'/]+)/([^'/]+)/([^'/]+)/feed.rss		/bin/shithub/feed	/usr/git '\1' '\2' '\3'
--- a/log
+++ b/log
@@ -35,7 +35,10 @@
 	exit
 }
 cd /mnt/git/$ref/tree
-echo '	<p>'
+echo '	<p>
+	<a href="/git/'$gituser/$repo'/HEAD/feed.rss">RSS feed</a>
+	</p>
+	<p>'
 shortlog $gituser $repo $ref 100
 echo '	</p>'
 echo '	</body>
--- a/mkfile
+++ b/mkfile
@@ -10,7 +10,8 @@
 	viewraw\
 	log\
 	show\
-	patch
+	patch\
+	feed
 
 LIBFILES=\
 	common.rc