changeset 6992:4e62be0208d3

merge with crew
author Benoit Boissinot <benoit.boissinot@ens-lyon.org>
date Fri, 05 Sep 2008 11:04:36 +0200
parents a408ea9876e6 (current diff) 32e68ffccbc5 (diff)
children ddfcefab8b97
files
diffstat 5 files changed, 68 insertions(+), 21 deletions(-) [+]
line wrap: on
line diff
--- a/hgext/highlight/__init__.py	Fri Sep 05 11:03:34 2008 +0200
+++ b/hgext/highlight/__init__.py	Fri Sep 05 11:04:36 2008 +0200
@@ -25,14 +25,25 @@
 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):
--- a/mercurial/statichttprepo.py	Fri Sep 05 11:03:34 2008 +0200
+++ b/mercurial/statichttprepo.py	Fri Sep 05 11:04:36 2008 +0200
@@ -54,7 +54,9 @@
                 raise repo.RepoError(_("requirement '%s' not supported") % r)
 
         # setup store
-        self.store = store.store(requirements, self.path, opener)
+        def pjoin(a, b):
+            return a + '/' + b
+        self.store = store.store(requirements, self.path, opener, pjoin)
         self.spath = self.store.path
         self.sopener = self.store.opener
         self.sjoin = self.store.join
--- a/mercurial/store.py	Fri Sep 05 11:03:34 2008 +0200
+++ b/mercurial/store.py	Fri Sep 05 11:04:36 2008 +0200
@@ -50,18 +50,19 @@
 
 class basicstore:
     '''base class for local repository stores'''
-    def __init__(self, path, opener):
+    def __init__(self, path, opener, pathjoiner):
+        self.pathjoiner = pathjoiner
         self.path = path
         self.createmode = _calcmode(path)
         self.opener = opener(self.path)
         self.opener.createmode = self.createmode
 
     def join(self, f):
-        return os.path.join(self.path, f)
+        return self.pathjoiner(self.path, f)
 
     def _walk(self, relpath, recurse):
         '''yields (unencoded, encoded, size)'''
-        path = os.path.join(self.path, relpath)
+        path = self.pathjoiner(self.path, relpath)
         striplen = len(self.path) + len(os.sep)
         prefix = path[striplen:]
         l = []
@@ -70,7 +71,7 @@
             while visit:
                 p = visit.pop()
                 for f, kind, st in osutil.listdir(p, stat=True):
-                    fp = os.path.join(p, f)
+                    fp = self.pathjoiner(p, f)
                     if kind == stat.S_IFREG and f[-2:] in ('.d', '.i'):
                         n = util.pconvert(fp[striplen:])
                         l.append((n, n, st.st_size))
@@ -96,8 +97,9 @@
         return ['requires'] + _data.split()
 
 class encodedstore(basicstore):
-    def __init__(self, path, opener):
-        self.path = os.path.join(path, 'store')
+    def __init__(self, path, opener, pathjoiner):
+        self.pathjoiner = pathjoiner
+        self.path = self.pathjoiner(path, 'store')
         self.createmode = _calcmode(self.path)
         op = opener(self.path)
         op.createmode = self.createmode
@@ -112,13 +114,14 @@
             yield a, b, size
 
     def join(self, f):
-        return os.path.join(self.path, encodefilename(f))
+        return self.pathjoiner(self.path, encodefilename(f))
 
     def copylist(self):
         return (['requires', '00changelog.i'] +
-                ['store/' + f for f in _data.split()])
+                [self.pathjoiner('store', f) for f in _data.split()])
 
-def store(requirements, path, opener):
+def store(requirements, path, opener, pathjoiner=None):
+    pathjoiner = pathjoiner or os.path.join
     if 'store' in requirements:
-        return encodedstore(path, opener)
-    return basicstore(path, opener)
+        return encodedstore(path, opener, pathjoiner)
+    return basicstore(path, opener, pathjoiner)
--- a/tests/test-highlight	Fri Sep 05 11:03:34 2008 +0200
+++ b/tests/test-highlight	Fri Sep 05 11:04:36 2008 +0200
@@ -18,14 +18,41 @@
 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@//" > 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
+
+diff -u b a
+
+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
+
+diff -u b a
+
+echo
 echo % hgweb highlightcss friendly
 "$TESTDIR/get-with-headers.py" localhost:$HGPORT '/highlightcss' > out
 head -n 4 out
--- a/tests/test-highlight.out	Fri Sep 05 11:03:34 2008 +0200
+++ b/tests/test-highlight.out	Fri Sep 05 11:04:36 2008 +0200
@@ -1,6 +1,6 @@
 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 @@
 </body>
 </html>
 
-% hgweb fileannotate
+% hgweb fileannotate, html
 200 Script output follows
 
 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
@@ -130,6 +130,10 @@
 </body>
 </html>
 
+% hgweb fileannotate, raw
+
+% hgweb filerevision, raw
+
 % hgweb highlightcss friendly
 200 Script output follows