[PATCH] highlight: Only pygmentize for HTML mimetypes
Rocco Rutte
pdmef at gmx.net
Thu Sep 4 09:49:17 UTC 2008
Hi,
* Dirkjan Ochtman wrote:
> Rocco Rutte <pdmef <at> gmx.net> writes:
> > - test against "text/html", not just for "html"
> > - use stringify() to render template to string
> Actually, I'm not sure about these.
> For the first, "html" would also match "application/xhtml+xml", which is nice
> (and I don't think there's any downside). Maybe change this back and add a
> comment about why this is a good thing?
The XHTML mimetype was why I first tested for "html" only. Later I
thought this might clash with a file's content-type by accident for
sending out raw revisions... turns out hgweb optimizes this case using
rawfile(). So I added a lengthy comment mentioning both.
> For the second, in crew, templates should always return an iterator over
> strings, so I'd prefer just using ''.join() (should be faster, too).
That wasn't obvious for me, sorry, fixed.
Regards, Rocco
# HG changeset patch
# User Rocco Rutte <pdmef at gmx.net>
# Date 1220521459 -7200
# Node ID 98170e45ca39639f4fa2e6ca8c9a0b061f0772de
# Parent 6c4a08270222569ba906f4f1c7860783eec19225
highlight: Only pygmentize for HTML mimetypes
For non-html mimetypes it doesn't make much sense. This also fixes the
issue that highlight unconditionally adds a <link/> tag for its CSS to
the template's header (which is pointless in text/plain output).
diff --git a/hgext/highlight/__init__.py b/hgext/highlight/__init__.py
--- a/hgext/highlight/__init__.py
+++ b/hgext/highlight/__init__.py
@@ -25,14 +25,25 @@ web_annotate = webcommands.annotate
web_annotate = webcommands.annotate
def filerevision_highlight(web, tmpl, fctx):
- style = web.config('web', 'pygments_style', 'colorful')
- highlight.pygmentize('fileline', fctx, style, tmpl)
+ mt = ''.join(tmpl('mimetype', encoding=web.encoding))
+ # only pygmentize for mimetype containing 'html' so we both match
+ # 'text/html' and possibly 'application/xhtml+xml' in the future
+ # so that we don't have to touch the extension when the mimetype
+ # for a template changes; also hgweb optimizes the case that a
+ # raw file is sent using rawfile() and doesn't call us, so we
+ # can't clash with the file's content-type here in case we
+ # pygmentize a html file
+ if 'html' in mt:
+ style = web.config('web', 'pygments_style', 'colorful')
+ highlight.pygmentize('fileline', fctx, style, tmpl)
return web_filerevision(web, tmpl, fctx)
def annotate_highlight(web, req, tmpl):
- fctx = webutil.filectx(web.repo, req)
- style = web.config('web', 'pygments_style', 'colorful')
- highlight.pygmentize('annotateline', fctx, style, tmpl)
+ mt = ''.join(tmpl('mimetype', encoding=web.encoding))
+ if 'html' in mt:
+ fctx = webutil.filectx(web.repo, req)
+ style = web.config('web', 'pygments_style', 'colorful')
+ highlight.pygmentize('annotateline', fctx, style, tmpl)
return web_annotate(web, req, tmpl)
def generate_css(web, req, tmpl):
diff --git a/tests/test-highlight b/tests/test-highlight
--- a/tests/test-highlight
+++ b/tests/test-highlight
@@ -18,14 +18,47 @@ hg serve -p $HGPORT -d -n test --pid-fil
hg serve -p $HGPORT -d -n test --pid-file=hg.pid -A access.log -E errors.log
cat hg.pid >> $DAEMON_PIDS
-echo % hgweb filerevision
+echo % hgweb filerevision, html
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py') \
| sed "s/[0-9]* years ago/long ago/g"
-echo % hgweb fileannotate
+echo % hgweb fileannotate, html
("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py') \
| sed "s/[0-9]* years ago/long ago/g"
+echo % hgweb fileannotate, raw
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/annotate/tip/get-with-headers.py?style=raw') \
+ | sed "s/^test at 0:/0:/" > a
+
+echo "200 Script output follows" > b
+echo "" >> b
+echo "" >> b
+hg annotate "get-with-headers.py" >> b
+echo "" >> b
+echo "" >> b
+echo "" >> b
+echo "" >> b
+
+S1=`"$TESTDIR/md5sum.py" a | sed 's/a$//'`
+S2=`"$TESTDIR/md5sum.py" b | sed 's/b$//'`
+
+test "$S1" = "$S2" && echo "annotate ok" || echo "annotate fail"
+
+echo
+echo % hgweb filerevision, raw
+("$TESTDIR/get-with-headers.py" localhost:$HGPORT '/file/tip/get-with-headers.py?style=raw') \
+ > a
+
+echo "200 Script output follows" > b
+echo "" >> b
+hg cat get-with-headers.py >> b
+
+S1=`"$TESTDIR/md5sum.py" a | sed 's/a$//'`
+S2=`"$TESTDIR/md5sum.py" b | sed 's/b$//'`
+
+test "$S1" = "$S2" && echo "cat ok" || echo "cat fail"
+
+echo
echo % hgweb highlightcss friendly
"$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
head -n 4 out
diff --git a/tests/test-highlight.out b/tests/test-highlight.out
--- a/tests/test-highlight.out
+++ b/tests/test-highlight.out
@@ -1,6 +1,6 @@ adding get-with-headers.py
adding get-with-headers.py
% hg serve
-% hgweb filerevision
+% hgweb filerevision, html
200 Script output follows
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
@@ -63,7 +63,7 @@ 200 Script output follows
</body>
</html>
-% hgweb fileannotate
+% hgweb fileannotate, html
200 Script output follows
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
@@ -130,6 +130,12 @@ 200 Script output follows
</body>
</html>
+% hgweb fileannotate, raw
+annotate ok
+
+% hgweb filerevision, raw
+cat ok
+
% hgweb highlightcss friendly
200 Script output follows
More information about the Mercurial-devel
mailing list