hgweb: move HTTP content types out of header templates
This removes the ability for templates to add custom HTTP headers, which can
easily be re-added if someone needs it. Thanks to asak for repeatedly reviewing
this patch and helping to iron out the quirks.
--- a/mercurial/hgweb/hgweb_mod.py Tue Jan 22 10:45:52 2008 +0100
+++ b/mercurial/hgweb/hgweb_mod.py Tue Jan 22 10:45:55 2008 +0100
@@ -6,7 +6,7 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-import os, mimetypes, re, mimetools, cStringIO
+import os, mimetypes, re
from mercurial.node import *
from mercurial import mdiff, ui, hg, util, archival, patch, hook
from mercurial import revlog, templater
@@ -253,11 +253,9 @@
# some functions for the templater
def header(**map):
- header_file = cStringIO.StringIO(
- ''.join(tmpl("header", encoding=self.encoding, **map)))
- msg = mimetools.Message(header_file, 0)
- req.header(msg.items())
- yield header_file.read()
+ ctype = tmpl('mimetype', encoding=self.encoding)
+ req.httphdr(templater.stringify(ctype))
+ yield tmpl('header', encoding=self.encoding, **map)
def footer(**map):
yield tmpl("footer", **map)
--- a/mercurial/hgweb/hgwebdir_mod.py Tue Jan 22 10:45:52 2008 +0100
+++ b/mercurial/hgweb/hgwebdir_mod.py Tue Jan 22 10:45:55 2008 +0100
@@ -6,7 +6,7 @@
# This software may be used and distributed according to the terms
# of the GNU General Public License, incorporated herein by reference.
-import os, mimetools, cStringIO
+import os
from mercurial.i18n import gettext as _
from mercurial import ui, hg, util, templater
from common import ErrorResponse, get_mtime, staticfile, style_map, paritygen, \
@@ -226,6 +226,7 @@
"%s%s" % ((not descending and column == sortcolumn)
and "-" or "", column))
for column in sortable]
+
req.write(tmpl("index", entries=entries, subdir=subdir,
sortcolumn=sortcolumn, descending=descending,
**dict(sort)))
@@ -233,11 +234,9 @@
def templater(self, req):
def header(**map):
- header_file = cStringIO.StringIO(
- ''.join(tmpl("header", encoding=util._encoding, **map)))
- msg = mimetools.Message(header_file, 0)
- req.header(msg.items())
- yield header_file.read()
+ ctype = tmpl('mimetype', encoding=util._encoding)
+ req.httphdr(templater.stringify(ctype))
+ yield tmpl('header', encoding=util._encoding, **map)
def footer(**map):
yield tmpl("footer", **map)
--- a/templates/atom/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/atom/header.tmpl Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,2 @@
-Content-type: application/atom+xml; charset={encoding}
-
<?xml version="1.0" encoding="{encoding}"?>
<feed xmlns="http://www.w3.org/2005/Atom">
\ No newline at end of file
--- a/templates/atom/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/atom/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,5 +1,6 @@
default = 'changelog'
feedupdated = '<updated>#date|rfc3339date#</updated>'
+mimetype = 'application/atom+xml; charset={encoding}'
header = header.tmpl
changelog = changelog.tmpl
changelogentry = changelogentry.tmpl
--- a/templates/gitweb/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/gitweb/header.tmpl Tue Jan 22 10:45:55 2008 +0100
@@ -1,5 +1,3 @@
-Content-type: text/html; charset={encoding}
-
<?xml version="1.0" encoding="{encoding}"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US">
--- a/templates/gitweb/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/gitweb/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,5 @@
default = 'summary'
+mimetype = 'text/html; charset={encoding}'
header = header.tmpl
footer = footer.tmpl
search = search.tmpl
--- a/templates/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/header.tmpl Tue Jan 22 10:45:55 2008 +0100
@@ -1,5 +1,3 @@
-Content-type: text/html; charset={encoding}
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
--- a/templates/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,5 @@
default = 'shortlog'
+mimetype = 'text/html; charset={encoding}'
header = header.tmpl
footer = footer.tmpl
search = search.tmpl
--- a/templates/old/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/old/header.tmpl Tue Jan 22 10:45:55 2008 +0100
@@ -1,5 +1,3 @@
-Content-type: text/html
-
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
--- a/templates/old/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/old/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,5 @@
default = 'changelog'
+mimetype = 'text/html'
header = header.tmpl
footer = footer.tmpl
search = search.tmpl
--- a/templates/raw/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2 +0,0 @@
-Content-type: text/plain; charset={encoding}
-
--- a/templates/raw/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/raw/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,5 @@
-header = header.tmpl
+mimetype = 'text/plain; charset={encoding}'
+header = ''
footer = ''
changeset = changeset.tmpl
difflineplus = '#line#'
--- a/templates/rss/header.tmpl Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/rss/header.tmpl Tue Jan 22 10:45:55 2008 +0100
@@ -1,5 +1,3 @@
-Content-type: text/xml; charset={encoding}
-
<?xml version="1.0" encoding="{encoding}"?>
<rss version="2.0">
<channel>
--- a/templates/rss/map Tue Jan 22 10:45:52 2008 +0100
+++ b/templates/rss/map Tue Jan 22 10:45:55 2008 +0100
@@ -1,4 +1,5 @@
default = 'changelog'
+mimetype = 'text/xml; charset={encoding}'
header = header.tmpl
changelog = changelog.tmpl
changelogentry = changelogentry.tmpl
--- a/tests/test-hgweb-no-request-uri.out Tue Jan 22 10:45:52 2008 +0100
+++ b/tests/test-hgweb-no-request-uri.out Tue Jan 22 10:45:55 2008 +0100
@@ -7,7 +7,7 @@
---- HEADERS
200 Script output follows
---- DATA
-[('content-type', 'application/atom+xml; charset=ascii')]
+[('Content-type', 'application/atom+xml; charset=ascii')]
<?xml version="1.0" encoding="ascii"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<!-- Changelog -->
@@ -41,7 +41,7 @@
---- HEADERS
200 Script output follows
---- DATA
-[('content-type', 'text/plain; charset=ascii')]
+[('Content-type', 'text/plain; charset=ascii')]
-rw-r--r-- 4 bar
@@ -52,7 +52,7 @@
---- HEADERS
200 Script output follows
---- DATA
-[('content-type', 'text/plain; charset=ascii')]
+[('Content-type', 'text/plain; charset=ascii')]
/repo/
@@ -62,7 +62,7 @@
---- HEADERS
200 Script output follows
---- DATA
-[('content-type', 'text/plain; charset=ascii')]
+[('Content-type', 'text/plain; charset=ascii')]
-rw-r--r-- 4 bar
--- a/tests/test-non-interactive-wsgi.out Tue Jan 22 10:45:52 2008 +0100
+++ b/tests/test-non-interactive-wsgi.out Tue Jan 22 10:45:55 2008 +0100
@@ -7,6 +7,6 @@
---- HEADERS
200 Script output follows
---- DATA
-[('content-type', 'text/html; charset=ascii')]
+[('Content-type', 'text/html; charset=ascii')]
---- ERRORS