mercurial/hgweb/webcommands.py
branchstable
changeset 17302 5c64ce6168da
parent 17289 f2d6b4f8e78c
child 17303 06217d3cf8d9
equal deleted inserted replaced
17301:2e8342aeab49 17302:5c64ce6168da
     6 # GNU General Public License version 2 or any later version.
     6 # GNU General Public License version 2 or any later version.
     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
    11 from mercurial.node import short, hex, nullid
    12 from mercurial.util import binary
    12 from mercurial.util import binary
    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
   595     if 'context' in req.form:
   595     if 'context' in req.form:
   596         context = parsecontext(req.form['context'][0])
   596         context = parsecontext(req.form['context'][0])
   597     else:
   597     else:
   598         context = parsecontext(web.config('web', 'comparisoncontext', '5'))
   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     return tmpl('filecomparison',
   633     return tmpl('filecomparison',
   602                 file=path,
   634                 file=path,
   603                 node=hex(ctx.node()),
   635                 node=hex(ctx.node()),
   604                 rev=ctx.rev(),
   636                 rev=ctx.rev(),
   605                 date=ctx.date(),
   637                 date=ctx.date(),
   607                 author=ctx.user(),
   639                 author=ctx.user(),
   608                 rename=rename,
   640                 rename=rename,
   609                 branch=webutil.nodebranchnodefault(ctx),
   641                 branch=webutil.nodebranchnodefault(ctx),
   610                 parent=webutil.parents(ctx),
   642                 parent=webutil.parents(ctx),
   611                 child=webutil.children(ctx),
   643                 child=webutil.children(ctx),
       
   644                 leftrev=leftrev,
       
   645                 leftnode=hex(leftnode),
       
   646                 rightrev=rightrev,
       
   647                 rightnode=hex(rightnode),
   612                 comparison=comparison)
   648                 comparison=comparison)
   613 
   649 
   614 def annotate(web, req, tmpl):
   650 def annotate(web, req, tmpl):
   615     fctx = webutil.filectx(web.repo, req)
   651     fctx = webutil.filectx(web.repo, req)
   616     f = fctx.path()
   652     f = fctx.path()