Mercurial > public > src > rhodecode
diff pylons_app/controllers/files.py @ 593:d8778cde98f0
added limits to single file diffs
changed changeset to use .size for cut off
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Tue, 05 Oct 2010 18:25:08 +0200 |
parents | d945c95ba4ac |
children |
line wrap: on
line diff
--- a/pylons_app/controllers/files.py Tue Oct 05 17:56:06 2010 +0200 +++ b/pylons_app/controllers/files.py Tue Oct 05 18:25:08 2010 +0200 @@ -24,6 +24,7 @@ """ from mercurial import archival from pylons import request, response, session, tmpl_context as c, url +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 @@ -155,26 +156,27 @@ c.repo = hg_model.get_repo(c.repo_name) try: - if diff1 not in ['', None, 'None', '0' * 12]: + if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: c.changeset_1 = c.repo.get_changeset(diff1) node1 = c.changeset_1.get_node(f_path) else: c.changeset_1 = EmptyChangeset() - node1 = FileNode('.', '') - if diff2 not in ['', None, 'None', '0' * 12]: + node1 = FileNode('.', '', changeset=c.changeset_1) + + if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: c.changeset_2 = c.repo.get_changeset(diff2) node2 = c.changeset_2.get_node(f_path) else: c.changeset_2 = EmptyChangeset() - node2 = FileNode('.', '') + node2 = FileNode('.', '', changeset=c.changeset_2) except RepositoryError: return redirect(url('files_home', repo_name=c.repo_name, f_path=f_path)) c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1.short_id) c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2.short_id) + f_udiff = differ.get_udiff(node1, node2) - diff = differ.DiffProcessor(f_udiff) if c.action == 'download': @@ -187,10 +189,16 @@ elif c.action == 'raw': c.cur_diff = '<pre class="raw">%s</pre>' % h.escape(diff.raw_diff()) elif c.action == 'diff': - c.cur_diff = diff.as_html() + if node1.size > c.file_size_limit or node2.size > c.file_size_limit: + c.cur_diff = _('Diff is to big to display') + else: + c.cur_diff = diff.as_html() else: #default option - c.cur_diff = diff.as_html() + if node1.size > c.file_size_limit or node2.size > c.file_size_limit: + c.cur_diff = _('Diff is to big to display') + else: + c.cur_diff = diff.as_html() if not c.cur_diff: c.no_changes = True return render('files/file_diff.html')