# HG changeset patch # User Christian Ebert # Date 1202210568 -3600 # Node ID 7bc6c0e1246457a2df3f709463b448cfc1c74b02 # Parent e99ace93ded024983f67f602b5c38c576e5015bf Expand keywords in hgweb rawfile output diff -r e99ace93ded0 -r 7bc6c0e12464 hgkw/keyword.py --- a/hgkw/keyword.py Tue Feb 05 08:04:50 2008 +0100 +++ b/hgkw/keyword.py Tue Feb 05 12:22:48 2008 +0100 @@ -83,8 +83,9 @@ from mercurial import commands, cmdutil, context, filelog, localrepo from mercurial import patch, revlog, templater, templatefilters, util from mercurial.node import * +from mercurial.hgweb import webcommands from mercurial.i18n import _ -import re, shutil, tempfile, time +import mimetypes, re, shutil, tempfile, time commands.optionalrepo += ' kwdemo' @@ -492,8 +493,32 @@ kwshrunk = kwt.shrink(''.join(self.lines)) self.lines = kwshrunk.splitlines(True) + def kwweb_rawfile(web, req, tmpl): + '''Monkeypatch webcommands.rawfile so it expands keywords.''' + path = web.cleanpath(req.form.get('file', [''])[0]) + if not path: + content = web.manifest(tmpl, web.changectx(req), path) + req.respond(webcommands.HTTP_OK, web.ctype) + return content + try: + fctx = web.filectx(req) + except revlog.LookupError: + content = web.manifest(tmpl, web.changectx(req), path) + req.respond(webcommands.HTTP_OK, web.ctype) + return content + path = fctx.path() + text = fctx.data() + if kwt.matcher(path): + text = kwt.expand(path, text, None) + mt = mimetypes.guess_type(path)[0] + if mt is None or util.binary(text): + mt = mt or 'application/octet-stream' + req.respond(webcommands.HTTP_OK, mt, path, len(text)) + return [text] + repo.__class__ = kwrepo patch.patchfile.__init__ = kwpatchfile_init + webcommands.rawfile = kwweb_rawfile cmdtable = {