# HG changeset patch # User mpm@selenic.com # Date 1120426379 28800 # Node ID 765182a4c8433f9ff69ecc08510b0842d4478b0c # Parent f8d44a2e6928e456924817427a6b2f2bd73353d7 [PATCH] Add RSS support to hgweb -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 [PATCH] Add RSS support to hgweb From: Goffredo Baroncelli with the two small patches below, now hgweb can act as feed source. Two kinds ofobjects can be tracked: the changelong and the files. This can be useful if anyone would track the changes of a file ( and because git has it, mercurial have to has ). To check the changelog the url is http://127.0.0.1:8000/pippo.pluto?cmd=changelog;style=rss To check a file ( the mercurial/hgweb.py for examples ) the url is http://127.0.0.1:8000/?cmd=filelog;file=mercurial/hgweb.py;filenode=0;style=rss The first patch adds a new filter for the template: the filter is named rfc822date, and translates the date from the touple format to a rfc822 style date. The second patch adds the templates needed to create the rss pages. Tested with akgregator ( kde ). [tweaked by mpm: add Content-type: text/xml add support for URL to header() add header with link and content type add RSS links on the normal pages] manifest hash: 170c03d50490d7160097f59abdde1a5073d2ba82 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.0 (GNU/Linux) iD8DBQFCyFmLywK+sNU5EO8RApkrAKCYF/vZ3DwdMXPBds2LxGEX8+tK5QCfTeOc ZhPN8Xjt2cD3wMbNXMcoNSo= =COlM -----END PGP SIGNATURE----- diff -r f8d44a2e6928 -r 765182a4c843 mercurial/hgweb.py --- a/mercurial/hgweb.py Sun Jul 03 12:29:37 2005 -0800 +++ b/mercurial/hgweb.py Sun Jul 03 13:32:59 2005 -0800 @@ -108,6 +108,12 @@ tmpl = self.cache[t] = file(self.map[t]).read() return template(tmpl, self.filters, **map) +def rfc822date(x): + month= [None,"Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] + yyyy,mon,dd,hh,mm,ss,wd,x,y = time.gmtime(x) + return "%d %s %d %d:%d:%d"%(dd, month[mon], yyyy, hh, mm, ss) + class hgweb: maxchanges = 10 maxfiles = 10 @@ -127,7 +133,8 @@ "obfuscate": obfuscate, "short": (lambda x: x[:12]), "firstline": (lambda x: x.splitlines(1)[0]), - "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--") + "permissions": (lambda x: x and "-rwxr-xr-x" or "-rw-r--r--"), + "rfc822date": rfc822date, } def refresh(self): @@ -217,7 +224,12 @@ yield diffblock(mdiff.unidiff(to, date1, tn, date2, f), f, tn) def header(self): - yield self.t("header", repo = self.reponame) + port = os.environ["SERVER_PORT"] + port = port != "80" and (":" + port) or "" + self.url = "http://%s%s%s" % \ + (os.environ["SERVER_NAME"], port, os.environ["REQUEST_URI"]) + + yield self.t("header", repo = self.reponame, url = self.url) def footer(self): yield self.t("footer", repo = self.reponame) @@ -729,6 +741,9 @@ env = {} env['GATEWAY_INTERFACE'] = 'CGI/1.1' env['REQUEST_METHOD'] = self.command + env['SERVER_NAME'] = self.server.server_name + env['SERVER_PORT'] = str(self.server.server_port) + env['REQUEST_URI'] = "/" if query: env['QUERY_STRING'] = query host = self.address_string() diff -r f8d44a2e6928 -r 765182a4c843 templates/changelog-rss.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/changelog-rss.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,6 @@ +#header# + #repo|escape# Changelog + #repo|escape# Changelog + #entries# + + \ No newline at end of file diff -r f8d44a2e6928 -r 765182a4c843 templates/changelog.tmpl --- a/templates/changelog.tmpl Sun Jul 03 12:29:37 2005 -0800 +++ b/templates/changelog.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -6,6 +6,7 @@
tags manifest +rss

changelog for #repo|escape#

diff -r f8d44a2e6928 -r 765182a4c843 templates/changelogentry-rss.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/changelogentry-rss.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,7 @@ + + #desc|firstline|escape# + http://127.0.0.1:8000/?cmd=changeset;node=#node#" + #desc|escape|addbreaks# + #author|obfuscate# + #date|rfc822date# + diff -r f8d44a2e6928 -r 765182a4c843 templates/filelog-rss.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/filelog-rss.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,6 @@ +#header# + #repo|escape#: #file# history + #file# revision history + #entries# + + \ No newline at end of file diff -r f8d44a2e6928 -r 765182a4c843 templates/filelog.tmpl --- a/templates/filelog.tmpl Sun Jul 03 12:29:37 2005 -0800 +++ b/templates/filelog.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -8,6 +8,7 @@ tags file annotate +rss

#file# revision history

diff -r f8d44a2e6928 -r 765182a4c843 templates/filelogentry-rss.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/filelogentry-rss.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,7 @@ + + #desc|firstline|escape# + http://127.0.0.1:8000/?cmd=file;file=#file#;filenode=#filenode#" + #desc|escape|addbreaks# + #author|obfuscate# + #date|rfc822date#> + diff -r f8d44a2e6928 -r 765182a4c843 templates/header-rss.tmpl --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/header-rss.tmpl Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,6 @@ +Content-type: text/xml + + + + #url# + en-us diff -r f8d44a2e6928 -r 765182a4c843 templates/map-rss --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/templates/map-rss Sun Jul 03 13:32:59 2005 -0800 @@ -0,0 +1,5 @@ +header = header-rss.tmpl +changelog = changelog-rss.tmpl +changelogentry = changelogentry-rss.tmpl +filelog = filelog-rss.tmpl +filelogentry = filelogentry-rss.tmpl