@@ -22,11 +22,12 @@ changeset controller for pylons
@author: marcink
"""
from pylons import tmpl_context as c, url, request, response
from pylons.i18n.translation import _
from pylons.controllers.util import redirect
from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator
from pylons_app.lib.base import BaseController, render
from pylons_app.model.hg_model import HgModel
from vcs.exceptions import RepositoryError
from vcs.exceptions import RepositoryError, ChangesetError
from vcs.nodes import FileNode
from vcs.utils import diffs as differ
import logging
@@ -44,6 +45,76 @@ class ChangesetController(BaseController
def index(self, revision):
hg_model = HgModel()
cut_off_limit = 1024 * 100
def wrap_to_table(str):
return '''<table class="code-difftable">
<tr class="line">
<td class="lineno new"></td>
<td class="code"><pre>%s</pre></td>
</tr>
</table>''' % str
try:
c.changeset = hg_model.get_repo(c.repo_name).get_changeset(revision)
except RepositoryError:
log.error(traceback.format_exc())
return redirect(url('hg_home'))
else:
c.changeset_old = c.changeset.parents[0]
except IndexError:
c.changeset_old = None
c.changes = []
c.sum_added = 0
for node in c.changeset.added:
filenode_old = FileNode(node.path, '')
if filenode_old.is_binary or node.is_binary:
diff = wrap_to_table(_('binary file'))
c.sum_added += len(node.content)
if c.sum_added < cut_off_limit:
f_udiff = differ.get_udiff(filenode_old, node)
diff = differ.DiffProcessor(f_udiff).as_html()
diff = wrap_to_table(_('Changeset is to big see raw changeset'))
cs1 = None
cs2 = node.last_changeset.short_id
c.changes.append(('added', node, diff, cs1, cs2))
c.sum_removed = 0
for node in c.changeset.changed:
filenode_old = c.changeset_old.get_node(node.path)
except ChangesetError:
c.sum_removed += len(node.content)
if c.sum_removed < cut_off_limit:
cs1 = filenode_old.last_changeset.short_id
c.changes.append(('changed', node, diff, cs1, cs2))
for node in c.changeset.removed:
c.changes.append(('removed', node, None, None, None))
return render('changeset/changeset.html')
def raw_changeset(self, revision):
method = request.GET.get('diff', 'show')
@@ -59,52 +130,7 @@ class ChangesetController(BaseController
diff = 'binary file'
def raw_changeset(self,revision):
method = request.GET.get('diff','show')
diff = _('binary file')
diff = differ.DiffProcessor(f_udiff).raw_diff()
@@ -116,7 +142,7 @@ class ChangesetController(BaseController
@@ -129,7 +155,7 @@ class ChangesetController(BaseController
if method == 'download':
response.content_disposition = 'attachment; filename=%s.patch' % revision
parent = True if len(c.changeset.parents) > 0 else False
c.parent_tmpl = 'Parent %s' % c.changeset.parents[0]._hex if parent else ''
c.parent_tmpl = 'Parent %s' % c.changeset.parents[0].raw_id if parent else ''
c.diffs = ''
for x in c.changes:
# HG changeset patch
# User ${c.changeset.author|n}
# Date ${"%d %d" % c.changeset._ctx.date()}
# Node ID ${c.changeset._hex}
# Node ID ${c.changeset.raw_id}
# ${c.parent_tmpl}
${c.changeset.message}
Status change: