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):