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>