Mercurial > hg
changeset 1411:e2ba788545bf
hgweb: make viewing of non-text work in hgweb
We use mimetypes.guess_type to guess file types and util.binary to determine
whether a file is displayable as text.
This lets us display displayable text files in our normal source view.
Files that appear to be binary will be displayed as something like
"(binary:image/gif)".
Clicking on raw view will send the raw file with an appropriate MIME
type. Thus things like GIFs will now be viewable inside hgweb without
making a mess. Further, things like postscript files that are text
should show source in the normal view and a browser can launch a
postscript viewer for the raw view.
author | Matt Mackall <mpm@selenic.com> |
---|---|
date | Tue, 18 Oct 2005 23:50:55 -0700 |
parents | 17703aa4491e |
children | c1e0aebfabc0 |
files | mercurial/hgweb.py templates/filerevision-raw.tmpl templates/filerevision.tmpl |
diffstat | 3 files changed, 13 insertions(+), 4 deletions(-) [+] |
line wrap: on
line diff
--- a/mercurial/hgweb.py Tue Oct 18 23:08:35 2005 -0700 +++ b/mercurial/hgweb.py Tue Oct 18 23:50:55 2005 -0700 @@ -10,6 +10,7 @@ from demandload import demandload demandload(globals(), "mdiff time re socket zlib errno ui hg ConfigParser") demandload(globals(), "zipfile tempfile StringIO tarfile BaseHTTPServer util") +demandload(globals(), "mimetypes") from node import * from i18n import gettext as _ @@ -466,6 +467,11 @@ cs = cl.read(cn) mfn = cs[0] + mt = mimetypes.guess_type(f)[0] + rawtext = text + if util.binary(text): + text = "(binary:%s)" % mt + def lines(): for l, t in enumerate(text.splitlines(1)): yield {"line": t, @@ -477,6 +483,8 @@ filenode=node, path=up(f), text=lines(), + raw=rawtext, + mimetype=mt, rev=changerev, node=hex(cn), manifest=hex(mfn),
--- a/templates/filerevision-raw.tmpl Tue Oct 18 23:08:35 2005 -0700 +++ b/templates/filerevision-raw.tmpl Tue Oct 18 23:50:55 2005 -0700 @@ -1,3 +1,4 @@ -#header# -#text%fileline# -#footer# +Context-type: #mimetype# +Content-disposition: filename=#file# + +#raw#
--- a/templates/filerevision.tmpl Tue Oct 18 23:08:35 2005 -0700 +++ b/templates/filerevision.tmpl Tue Oct 18 23:50:55 2005 -0700 @@ -10,7 +10,7 @@ <a href="?mf=#manifest|short#;path=#path#">manifest</a> <a href="?fl=#filenode|short#;file=#file#">revisions</a> <a href="?fa=#filenode|short#;file=#file#">annotate</a> -<a href="?f=#node|short#;file=#file#;style=raw">raw</a> +<a href="?f=#filenode|short#;file=#file#;style=raw">raw</a> </div> <h2>#file#</h2>