Mercurial > public > src > rhodecode
comparison 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 |
comparison
equal
deleted
inserted
replaced
592:a99e23e6c1e8 | 593:d8778cde98f0 |
---|---|
22 files controller for pylons | 22 files controller for pylons |
23 @author: marcink | 23 @author: marcink |
24 """ | 24 """ |
25 from mercurial import archival | 25 from mercurial import archival |
26 from pylons import request, response, session, tmpl_context as c, url | 26 from pylons import request, response, session, tmpl_context as c, url |
27 from pylons.i18n.translation import _ | |
27 from pylons.controllers.util import redirect | 28 from pylons.controllers.util import redirect |
28 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator | 29 from pylons_app.lib.auth import LoginRequired, HasRepoPermissionAnyDecorator |
29 from pylons_app.lib.base import BaseController, render | 30 from pylons_app.lib.base import BaseController, render |
30 from pylons_app.lib.utils import EmptyChangeset | 31 from pylons_app.lib.utils import EmptyChangeset |
31 from pylons_app.model.hg_model import HgModel | 32 from pylons_app.model.hg_model import HgModel |
153 c.no_changes = diff1 == diff2 | 154 c.no_changes = diff1 == diff2 |
154 c.f_path = f_path | 155 c.f_path = f_path |
155 c.repo = hg_model.get_repo(c.repo_name) | 156 c.repo = hg_model.get_repo(c.repo_name) |
156 | 157 |
157 try: | 158 try: |
158 if diff1 not in ['', None, 'None', '0' * 12]: | 159 if diff1 not in ['', None, 'None', '0' * 12, '0' * 40]: |
159 c.changeset_1 = c.repo.get_changeset(diff1) | 160 c.changeset_1 = c.repo.get_changeset(diff1) |
160 node1 = c.changeset_1.get_node(f_path) | 161 node1 = c.changeset_1.get_node(f_path) |
161 else: | 162 else: |
162 c.changeset_1 = EmptyChangeset() | 163 c.changeset_1 = EmptyChangeset() |
163 node1 = FileNode('.', '') | 164 node1 = FileNode('.', '', changeset=c.changeset_1) |
164 if diff2 not in ['', None, 'None', '0' * 12]: | 165 |
166 if diff2 not in ['', None, 'None', '0' * 12, '0' * 40]: | |
165 c.changeset_2 = c.repo.get_changeset(diff2) | 167 c.changeset_2 = c.repo.get_changeset(diff2) |
166 node2 = c.changeset_2.get_node(f_path) | 168 node2 = c.changeset_2.get_node(f_path) |
167 else: | 169 else: |
168 c.changeset_2 = EmptyChangeset() | 170 c.changeset_2 = EmptyChangeset() |
169 node2 = FileNode('.', '') | 171 node2 = FileNode('.', '', changeset=c.changeset_2) |
170 except RepositoryError: | 172 except RepositoryError: |
171 return redirect(url('files_home', | 173 return redirect(url('files_home', |
172 repo_name=c.repo_name, f_path=f_path)) | 174 repo_name=c.repo_name, f_path=f_path)) |
173 | 175 |
174 c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1.short_id) | 176 c.diff1 = 'r%s:%s' % (c.changeset_1.revision, c.changeset_1.short_id) |
175 c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2.short_id) | 177 c.diff2 = 'r%s:%s' % (c.changeset_2.revision, c.changeset_2.short_id) |
178 | |
176 f_udiff = differ.get_udiff(node1, node2) | 179 f_udiff = differ.get_udiff(node1, node2) |
177 | |
178 diff = differ.DiffProcessor(f_udiff) | 180 diff = differ.DiffProcessor(f_udiff) |
179 | 181 |
180 if c.action == 'download': | 182 if c.action == 'download': |
181 diff_name = '%s_vs_%s.diff' % (diff1, diff2) | 183 diff_name = '%s_vs_%s.diff' % (diff1, diff2) |
182 response.content_type = 'text/plain' | 184 response.content_type = 'text/plain' |
185 return diff.raw_diff() | 187 return diff.raw_diff() |
186 | 188 |
187 elif c.action == 'raw': | 189 elif c.action == 'raw': |
188 c.cur_diff = '<pre class="raw">%s</pre>' % h.escape(diff.raw_diff()) | 190 c.cur_diff = '<pre class="raw">%s</pre>' % h.escape(diff.raw_diff()) |
189 elif c.action == 'diff': | 191 elif c.action == 'diff': |
190 c.cur_diff = diff.as_html() | 192 if node1.size > c.file_size_limit or node2.size > c.file_size_limit: |
193 c.cur_diff = _('Diff is to big to display') | |
194 else: | |
195 c.cur_diff = diff.as_html() | |
191 else: | 196 else: |
192 #default option | 197 #default option |
193 c.cur_diff = diff.as_html() | 198 if node1.size > c.file_size_limit or node2.size > c.file_size_limit: |
199 c.cur_diff = _('Diff is to big to display') | |
200 else: | |
201 c.cur_diff = diff.as_html() | |
194 | 202 |
195 if not c.cur_diff: c.no_changes = True | 203 if not c.cur_diff: c.no_changes = True |
196 return render('files/file_diff.html') | 204 return render('files/file_diff.html') |
197 | 205 |
198 def _get_history(self, repo, node, f_path): | 206 def _get_history(self, repo, node, f_path): |