##// END OF EJS Templates
hgweb: fixes traceback for invalid files by removing top-level template...
wujek srujek -
r17302:5c64ce61 stable
parent child Browse files
Show More
@@ -8,7 +8,7 b''
8 8 import os, mimetypes, re, cgi, copy
9 9 import webutil
10 10 from mercurial import error, encoding, archival, templater, templatefilters
11 from mercurial.node import short, hex
11 from mercurial.node import short, hex, nullid
12 12 from mercurial.util import binary
13 13 from common import paritygen, staticfile, get_contact, ErrorResponse
14 14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND
@@ -597,7 +597,39 b' def comparison(web, req, tmpl):'
597 597 else:
598 598 context = parsecontext(web.config('web', 'comparisoncontext', '5'))
599 599
600 comparison = webutil.compare(tmpl, ctx, path, context)
600 def filelines(f):
601 if binary(f.data()):
602 mt = mimetypes.guess_type(f.path())[0]
603 if not mt:
604 mt = 'application/octet-stream'
605 return [_('(binary file %s, hash: %s)') % (mt, hex(f.filenode()))]
606 return f.data().splitlines()
607
608 if path in ctx:
609 fctx = ctx[path]
610 rightrev = fctx.filerev()
611 rightnode = fctx.filenode()
612 rightlines = filelines(fctx)
613 parents = fctx.parents()
614 if not parents:
615 leftrev = -1
616 leftnode = nullid
617 leftlines = ()
618 else:
619 pfctx = parents[0]
620 leftrev = pfctx.filerev()
621 leftnode = pfctx.filenode()
622 leftlines = filelines(pfctx)
623 else:
624 rightrev = -1
625 rightnode = nullid
626 rightlines = ()
627 fctx = ctx.parents()[0][path]
628 leftrev = fctx.filerev()
629 leftnode = fctx.filenode()
630 leftlines = filelines(fctx)
631
632 comparison = webutil.compare(tmpl, context, leftlines, rightlines)
601 633 return tmpl('filecomparison',
602 634 file=path,
603 635 node=hex(ctx.node()),
@@ -609,6 +641,10 b' def comparison(web, req, tmpl):'
609 641 branch=webutil.nodebranchnodefault(ctx),
610 642 parent=webutil.parents(ctx),
611 643 child=webutil.children(ctx),
644 leftrev=leftrev,
645 leftnode=hex(leftnode),
646 rightrev=rightrev,
647 rightnode=hex(rightnode),
612 648 comparison=comparison)
613 649
614 650 def annotate(web, req, tmpl):
@@ -6,7 +6,7 b''
6 6 # This software may be used and distributed according to the terms of the
7 7 # GNU General Public License version 2 or any later version.
8 8
9 import os, mimetypes, copy
9 import os, copy
10 10 from mercurial import match, patch, scmutil, error, ui, util
11 11 from mercurial.i18n import _
12 12 from mercurial.node import hex, nullid
@@ -227,17 +227,9 b' def diffs(repo, tmpl, ctx, files, parity'
227 227 yield tmpl('diffblock', parity=parity.next(), blockno=blockno,
228 228 lines=prettyprintlines(''.join(block), blockno))
229 229
230 def compare(tmpl, ctx, path, context):
230 def compare(tmpl, context, leftlines, rightlines):
231 231 '''Generator function that provides side-by-side comparison data.'''
232 232
233 def filelines(f):
234 if util.binary(f.data()):
235 mt = mimetypes.guess_type(f.path())[0]
236 if not mt:
237 mt = 'application/octet-stream'
238 return [_('(binary file %s, hash: %s)') % (mt, hex(f.filenode()))]
239 return f.data().splitlines()
240
241 233 def compline(type, leftlineno, leftline, rightlineno, rightline):
242 234 lineid = leftlineno and ("l%s" % leftlineno) or ''
243 235 lineid += rightlineno and ("r%s" % rightlineno) or ''
@@ -275,43 +267,12 b' def compare(tmpl, ctx, path, context):'
275 267 rightlineno=i + 1,
276 268 rightline=rightlines[i])
277 269
278 if path in ctx:
279 fctx = ctx[path]
280 rightrev = fctx.filerev()
281 rightnode = fctx.filenode()
282 rightlines = filelines(fctx)
283 parents = fctx.parents()
284 if not parents:
285 leftrev = -1
286 leftnode = nullid
287 leftlines = ()
288 else:
289 pfctx = parents[0]
290 leftrev = pfctx.filerev()
291 leftnode = pfctx.filenode()
292 leftlines = filelines(pfctx)
293 else:
294 rightrev = -1
295 rightnode = nullid
296 rightlines = ()
297 fctx = ctx.parents()[0][path]
298 leftrev = fctx.filerev()
299 leftnode = fctx.filenode()
300 leftlines = filelines(fctx)
301
302 270 s = difflib.SequenceMatcher(None, leftlines, rightlines)
303 271 if context < 0:
304 blocks = [tmpl('comparisonblock', lines=getblock(s.get_opcodes()))]
272 yield tmpl('comparisonblock', lines=getblock(s.get_opcodes()))
305 273 else:
306 blocks = (tmpl('comparisonblock', lines=getblock(oc))
307 for oc in s.get_grouped_opcodes(n=context))
308
309 yield tmpl('comparison',
310 leftrev=leftrev,
311 leftnode=hex(leftnode),
312 rightrev=rightrev,
313 rightnode=hex(rightnode),
314 blocks=blocks)
274 for oc in s.get_grouped_opcodes(n=context):
275 yield tmpl('comparisonblock', lines=getblock(oc))
315 276
316 277 def diffstatgen(ctx):
317 278 '''Generator function that provides the diffstat data.'''
@@ -84,16 +84,6 b' difflineminus = \'<a href="#{lineid}" id='
84 84 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
85 85 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
86 86
87 comparison = '
88 <table class="bigtable">
89 <thead class="header">
90 <tr>
91 <th>{leftrev}:{leftnode|short}</th>
92 <th>{rightrev}:{rightnode|short}</th>
93 </tr>
94 </thead>
95 {blocks}
96 </table>'
97 87 comparisonblock ='
98 88 <tbody class="block">
99 89 {lines}
@@ -55,7 +55,15 b' comparison |'
55 55 </div>
56 56
57 57 <div class="comparison">
58 {comparison}
58 <table style="border-collapse:collapse;">
59 <thead class="header">
60 <tr>
61 <th>{leftrev}:{leftnode|short}</th>
62 <th>{rightrev}:{rightnode|short}</th>
63 </tr>
64 </thead>
65 {comparison}
66 </table>
59 67 </div>
60 68
61 69 </div>
@@ -103,16 +103,6 b' difflineminus = \'<span style="color:#cc0'
103 103 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
104 104 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
105 105
106 comparison = '
107 <table style="border-collapse:collapse;">
108 <thead class="header">
109 <tr>
110 <th>{leftrev}:{leftnode|short}</th>
111 <th>{rightrev}:{rightnode|short}</th>
112 </tr>
113 </thead>
114 {blocks}
115 </table>'
116 106 comparisonblock ='
117 107 <tbody class="block">
118 108 {lines}
@@ -58,7 +58,15 b''
58 58 </div>
59 59
60 60 <div class="comparison">
61 {comparison}
61 <table class="bigtable">
62 <thead class="header">
63 <tr>
64 <th>{leftrev}:{leftnode|short}</th>
65 <th>{rightrev}:{rightnode|short}</th>
66 </tr>
67 </thead>
68 {comparison}
69 </table>
62 70 </div>
63 71
64 72 {footer}
@@ -98,16 +98,6 b' difflineminus = \'<span style="color:#cc0'
98 98 difflineat = '<span style="color:#990099;"><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
99 99 diffline = '<span><a class="linenr" href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}</span>'
100 100
101 comparison = '
102 <table class="bigtable">
103 <thead class="header">
104 <tr>
105 <th>{leftrev}:{leftnode|short}</th>
106 <th>{rightrev}:{rightnode|short}</th>
107 </tr>
108 </thead>
109 {blocks}
110 </table>'
111 101 comparisonblock ='
112 102 <tbody class="block">
113 103 {lines}
@@ -76,7 +76,15 b' files, or words in the commit message</d'
76 76 <span class="legendinfo replace">replaced</span>
77 77 </div>
78 78
79 {comparison}
79 <table class="bigtable">
80 <thead class="header">
81 <tr>
82 <th>{leftrev}:{leftnode|short}</th>
83 <th>{rightrev}:{rightnode|short}</th>
84 </tr>
85 </thead>
86 {comparison}
87 </table>
80 88
81 89 </div>
82 90 </div>
@@ -83,16 +83,6 b' difflineminus = \'<a href="#{lineid}" id='
83 83 difflineat = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> <span class="atline">{line|escape}</span>'
84 84 diffline = '<a href="#{lineid}" id="{lineid}">{linenumber}</a> {line|escape}'
85 85
86 comparison = '
87 <table class="bigtable">
88 <thead class="header">
89 <tr>
90 <th>{leftrev}:{leftnode|short}</th>
91 <th>{rightrev}:{rightnode|short}</th>
92 </tr>
93 </thead>
94 {blocks}
95 </table>'
96 86 comparisonblock ='
97 87 <tbody class="block">
98 88 {lines}
@@ -642,15 +642,14 b' comparison new file'
642 642 <span class="legendinfo replace">replaced</span>
643 643 </div>
644 644
645
646 645 <table class="bigtable">
647 <thead class="header">
648 <tr>
649 <th>-1:000000000000</th>
650 <th>0:b789fdd96dc2</th>
651 </tr>
652 </thead>
653
646 <thead class="header">
647 <tr>
648 <th>-1:000000000000</th>
649 <th>0:b789fdd96dc2</th>
650 </tr>
651 </thead>
652
654 653 <tbody class="block">
655 654
656 655 <tr>
@@ -765,15 +764,14 b' comparison existing file'
765 764 <span class="legendinfo replace">replaced</span>
766 765 </div>
767 766
768
769 767 <table class="bigtable">
770 <thead class="header">
771 <tr>
772 <th>0:b789fdd96dc2</th>
773 <th>1:a80d06849b33</th>
774 </tr>
775 </thead>
776
768 <thead class="header">
769 <tr>
770 <th>0:b789fdd96dc2</th>
771 <th>1:a80d06849b33</th>
772 </tr>
773 </thead>
774
777 775 <tbody class="block">
778 776
779 777 <tr>
@@ -890,15 +888,14 b' comparison removed file'
890 888 <span class="legendinfo replace">replaced</span>
891 889 </div>
892 890
893
894 891 <table class="bigtable">
895 <thead class="header">
896 <tr>
897 <th>1:a80d06849b33</th>
898 <th>-1:000000000000</th>
899 </tr>
900 </thead>
901
892 <thead class="header">
893 <tr>
894 <th>1:a80d06849b33</th>
895 <th>-1:000000000000</th>
896 </tr>
897 </thead>
898
902 899 <tbody class="block">
903 900
904 901 <tr>
General Comments 0
You need to be logged in to leave comments. Login now