7 |
7 |
8 import os, mimetypes, re, cgi, copy |
8 import os, mimetypes, re, cgi, copy |
9 import webutil |
9 import webutil |
10 from mercurial import error, encoding, archival, templater, templatefilters |
10 from mercurial import error, encoding, archival, templater, templatefilters |
11 from mercurial.node import short, hex, nullid |
11 from mercurial.node import short, hex, nullid |
12 from mercurial.util import binary |
12 from mercurial import util |
13 from common import paritygen, staticfile, get_contact, ErrorResponse |
13 from common import paritygen, staticfile, get_contact, ErrorResponse |
14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND |
14 from common import HTTP_OK, HTTP_FORBIDDEN, HTTP_NOT_FOUND |
15 from mercurial import graphmod, patch |
15 from mercurial import graphmod, patch |
16 from mercurial import help as helpmod |
16 from mercurial import help as helpmod |
17 from mercurial import scmutil |
17 from mercurial import scmutil |
55 text = fctx.data() |
55 text = fctx.data() |
56 mt = 'application/binary' |
56 mt = 'application/binary' |
57 if guessmime: |
57 if guessmime: |
58 mt = mimetypes.guess_type(path)[0] |
58 mt = mimetypes.guess_type(path)[0] |
59 if mt is None: |
59 if mt is None: |
60 mt = binary(text) and 'application/binary' or 'text/plain' |
60 mt = util.binary(text) and 'application/binary' or 'text/plain' |
61 if mt.startswith('text/'): |
61 if mt.startswith('text/'): |
62 mt += '; charset="%s"' % encoding.encoding |
62 mt += '; charset="%s"' % encoding.encoding |
63 |
63 |
64 req.respond(HTTP_OK, mt, path, body=text) |
64 req.respond(HTTP_OK, mt, path, body=text) |
65 return [] |
65 return [] |
67 def _filerevision(web, tmpl, fctx): |
67 def _filerevision(web, tmpl, fctx): |
68 f = fctx.path() |
68 f = fctx.path() |
69 text = fctx.data() |
69 text = fctx.data() |
70 parity = paritygen(web.stripecount) |
70 parity = paritygen(web.stripecount) |
71 |
71 |
72 if binary(text): |
72 if util.binary(text): |
73 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream' |
73 mt = mimetypes.guess_type(f)[0] or 'application/octet-stream' |
74 text = '(binary:%s)' % mt |
74 text = '(binary:%s)' % mt |
75 |
75 |
76 def lines(): |
76 def lines(): |
77 for lineno, t in enumerate(text.splitlines(True)): |
77 for lineno, t in enumerate(text.splitlines(True)): |
635 context = parsecontext(req.form['context'][0]) |
635 context = parsecontext(req.form['context'][0]) |
636 else: |
636 else: |
637 context = parsecontext(web.config('web', 'comparisoncontext', '5')) |
637 context = parsecontext(web.config('web', 'comparisoncontext', '5')) |
638 |
638 |
639 def filelines(f): |
639 def filelines(f): |
640 if binary(f.data()): |
640 if util.binary(f.data()): |
641 mt = mimetypes.guess_type(f.path())[0] |
641 mt = mimetypes.guess_type(f.path())[0] |
642 if not mt: |
642 if not mt: |
643 mt = 'application/octet-stream' |
643 mt = 'application/octet-stream' |
644 return [_('(binary file %s, hash: %s)') % (mt, hex(f.filenode()))] |
644 return [_('(binary file %s, hash: %s)') % (mt, hex(f.filenode()))] |
645 return f.data().splitlines() |
645 return f.data().splitlines() |
693 parity = paritygen(web.stripecount) |
693 parity = paritygen(web.stripecount) |
694 diffopts = patch.diffopts(web.repo.ui, untrusted=True, section='annotate') |
694 diffopts = patch.diffopts(web.repo.ui, untrusted=True, section='annotate') |
695 |
695 |
696 def annotate(**map): |
696 def annotate(**map): |
697 last = None |
697 last = None |
698 if binary(fctx.data()): |
698 if util.binary(fctx.data()): |
699 mt = (mimetypes.guess_type(fctx.path())[0] |
699 mt = (mimetypes.guess_type(fctx.path())[0] |
700 or 'application/octet-stream') |
700 or 'application/octet-stream') |
701 lines = enumerate([((fctx.filectx(fctx.filerev()), 1), |
701 lines = enumerate([((fctx.filectx(fctx.filerev()), 1), |
702 '(binary:%s)' % mt)]) |
702 '(binary:%s)' % mt)]) |
703 else: |
703 else: |