##// END OF EJS Templates
diffs: drop the DiffLimitExceeded container - just make it a flag available as property...
Mads Kiilerich -
r6839:e85f0837 default
parent child Browse files
Show More
@@ -48,7 +48,6 b' from kallithea.model.comment import Chan'
48 from kallithea.model.changeset_status import ChangesetStatusModel
48 from kallithea.model.changeset_status import ChangesetStatusModel
49 from kallithea.model.meta import Session
49 from kallithea.model.meta import Session
50 from kallithea.model.repo import RepoModel
50 from kallithea.model.repo import RepoModel
51 from kallithea.lib.diffs import LimitedDiffContainer
52 from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError
51 from kallithea.lib.exceptions import StatusChangeOnClosedPullRequestError
53 from kallithea.lib.vcs.backends.base import EmptyChangeset
52 from kallithea.lib.vcs.backends.base import EmptyChangeset
54 from kallithea.lib.utils2 import safe_unicode
53 from kallithea.lib.utils2 import safe_unicode
@@ -279,9 +278,7 b' class ChangesetController(BaseRepoContro'
279 diff_processor = diffs.DiffProcessor(raw_diff,
278 diff_processor = diffs.DiffProcessor(raw_diff,
280 vcs=c.db_repo_scm_instance.alias,
279 vcs=c.db_repo_scm_instance.alias,
281 diff_limit=diff_limit)
280 diff_limit=diff_limit)
282 c.limited_diff = False
281 c.limited_diff = diff_processor.limited_diff
283 if isinstance(diff_processor.parsed, LimitedDiffContainer):
284 c.limited_diff = True
285 for f in diff_processor.parsed:
282 for f in diff_processor.parsed:
286 st = f['stats']
283 st = f['stats']
287 c.lines_added += st['added']
284 c.lines_added += st['added']
@@ -42,7 +42,6 b' from kallithea.lib.base import BaseRepoC'
42 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
42 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
43 from kallithea.lib import diffs
43 from kallithea.lib import diffs
44 from kallithea.model.db import Repository
44 from kallithea.model.db import Repository
45 from kallithea.lib.diffs import LimitedDiffContainer
46 from kallithea.controllers.changeset import _ignorews_url, _context_url
45 from kallithea.controllers.changeset import _ignorews_url, _context_url
47 from kallithea.lib.graphmod import graph_data
46 from kallithea.lib.graphmod import graph_data
48
47
@@ -272,11 +271,7 b' class CompareController(BaseRepoControll'
272 context=line_context)
271 context=line_context)
273
272
274 diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit)
273 diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit)
275
274 c.limited_diff = diff_processor.limited_diff
276 c.limited_diff = False
277 if isinstance(diff_processor.parsed, LimitedDiffContainer):
278 c.limited_diff = True
279
280 c.file_diff_data = []
275 c.file_diff_data = []
281 c.lines_added = 0
276 c.lines_added = 0
282 c.lines_deleted = 0
277 c.lines_deleted = 0
@@ -38,7 +38,7 b' from kallithea import CONFIG'
38 from kallithea.lib import helpers as h
38 from kallithea.lib import helpers as h
39 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
39 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator
40 from kallithea.lib.base import BaseRepoController
40 from kallithea.lib.base import BaseRepoController
41 from kallithea.lib.diffs import DiffProcessor, LimitedDiffContainer
41 from kallithea.lib.diffs import DiffProcessor
42 from kallithea.model.db import CacheInvalidation
42 from kallithea.model.db import CacheInvalidation
43 from kallithea.lib.utils2 import safe_int, str2bool, safe_unicode
43 from kallithea.lib.utils2 import safe_int, str2bool, safe_unicode
44
44
@@ -76,9 +76,6 b' class FeedController(BaseRepoController)'
76 diff_processor = DiffProcessor(raw_diff,
76 diff_processor = DiffProcessor(raw_diff,
77 diff_limit=diff_limit,
77 diff_limit=diff_limit,
78 inline_diff=False)
78 inline_diff=False)
79 limited_diff = False
80 if isinstance(diff_processor.parsed, LimitedDiffContainer):
81 limited_diff = True
82
79
83 for st in diff_processor.parsed:
80 for st in diff_processor.parsed:
84 st.update({'added': st['stats']['added'],
81 st.update({'added': st['stats']['added'],
@@ -86,7 +83,7 b' class FeedController(BaseRepoController)'
86 changes.append('\n %(operation)s %(filename)s '
83 changes.append('\n %(operation)s %(filename)s '
87 '(%(added)s lines added, %(removed)s lines removed)'
84 '(%(added)s lines added, %(removed)s lines removed)'
88 % st)
85 % st)
89 if limited_diff:
86 if diff_processor.limited_diff:
90 changes = changes + ['\n ' +
87 changes = changes + ['\n ' +
91 _('Changeset was too big and was cut off...')]
88 _('Changeset was too big and was cut off...')]
92
89
@@ -39,7 +39,6 b' from kallithea.lib import diffs'
39 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator, \
39 from kallithea.lib.auth import LoginRequired, HasRepoPermissionLevelDecorator, \
40 NotAnonymous
40 NotAnonymous
41 from kallithea.lib.base import BaseRepoController, render, jsonify
41 from kallithea.lib.base import BaseRepoController, render, jsonify
42 from kallithea.lib.diffs import LimitedDiffContainer
43 from kallithea.lib.page import Page
42 from kallithea.lib.page import Page
44 from kallithea.lib.utils import action_logger
43 from kallithea.lib.utils import action_logger
45 from kallithea.lib.vcs.exceptions import EmptyRepositoryError, ChangesetDoesNotExistError
44 from kallithea.lib.vcs.exceptions import EmptyRepositoryError, ChangesetDoesNotExistError
@@ -598,11 +597,7 b' class PullrequestsController(BaseRepoCon'
598 except ChangesetDoesNotExistError:
597 except ChangesetDoesNotExistError:
599 raw_diff = _("The diff can't be shown - the PR revisions could not be found.")
598 raw_diff = _("The diff can't be shown - the PR revisions could not be found.")
600 diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit)
599 diff_processor = diffs.DiffProcessor(raw_diff or '', diff_limit=diff_limit)
601
600 c.limited_diff = diff_processor.limited_diff
602 c.limited_diff = False
603 if isinstance(diff_processor.parsed, LimitedDiffContainer):
604 c.limited_diff = True
605
606 c.file_diff_data = []
601 c.file_diff_data = []
607 c.lines_added = 0
602 c.lines_added = 0
608 c.lines_deleted = 0
603 c.lines_deleted = 0
@@ -141,18 +141,6 b' class DiffLimitExceeded(Exception):'
141 pass
141 pass
142
142
143
143
144 class LimitedDiffContainer(object):
145
146 def __init__(self, diff_limit, cur_diff_size, diff):
147 self.diff = diff
148 self.diff_limit = diff_limit
149 self.cur_diff_size = cur_diff_size
150
151 def __iter__(self):
152 for l in self.diff:
153 yield l
154
155
156 class DiffProcessor(object):
144 class DiffProcessor(object):
157 """
145 """
158 Give it a unified or git diff and it returns a list of the files that were
146 Give it a unified or git diff and it returns a list of the files that were
@@ -219,6 +207,7 b' class DiffProcessor(object):'
219 # calculate diff size
207 # calculate diff size
220 self.diff_limit = diff_limit
208 self.diff_limit = diff_limit
221 self.cur_diff_size = 0
209 self.cur_diff_size = 0
210 self.limited_diff = False
222 self.vcs = vcs
211 self.vcs = vcs
223 self.parsed = self._parse_gitdiff(inline_diff=inline_diff)
212 self.parsed = self._parse_gitdiff(inline_diff=inline_diff)
224
213
@@ -306,11 +295,10 b' class DiffProcessor(object):'
306
295
307 def _parse_gitdiff(self, inline_diff):
296 def _parse_gitdiff(self, inline_diff):
308 """Parse self._diff and return a list of dicts with meta info and chunks for each file.
297 """Parse self._diff and return a list of dicts with meta info and chunks for each file.
309 If diff is truncated, wrap it in LimitedDiffContainer.
298 Might set limited_diff.
310 Optionally, do an extra pass and to extra markup of one-liner changes.
299 Optionally, do an extra pass and to extra markup of one-liner changes.
311 """
300 """
312 _files = [] # list of dicts with meta info and chunks
301 _files = [] # list of dicts with meta info and chunks
313 diff_container = lambda arg: arg
314
302
315 starts = [m.start() for m in self._diff_git_re.finditer(self._diff)]
303 starts = [m.start() for m in self._diff_git_re.finditer(self._diff)]
316 starts.append(len(self._diff))
304 starts.append(len(self._diff))
@@ -385,9 +373,7 b' class DiffProcessor(object):'
385 stats['ops'][MOD_FILENODE] = 'modified file'
373 stats['ops'][MOD_FILENODE] = 'modified file'
386
374
387 except DiffLimitExceeded:
375 except DiffLimitExceeded:
388 diff_container = lambda _diff: \
376 self.limited_diff = True
389 LimitedDiffContainer(self.diff_limit,
390 self.cur_diff_size, _diff)
391 break
377 break
392 else: # Git binary patch (or empty diff)
378 else: # Git binary patch (or empty diff)
393 # Git binary patch
379 # Git binary patch
@@ -419,7 +405,7 b' class DiffProcessor(object):'
419 })
405 })
420
406
421 if not inline_diff:
407 if not inline_diff:
422 return diff_container(_files)
408 return _files
423
409
424 # highlight inline changes when one del is followed by one add
410 # highlight inline changes when one del is followed by one add
425 for diff_data in _files:
411 for diff_data in _files:
@@ -452,7 +438,7 b' class DiffProcessor(object):'
452 except StopIteration:
438 except StopIteration:
453 pass
439 pass
454
440
455 return diff_container(_files)
441 return _files
456
442
457 def _parse_lines(self, diff_lines):
443 def _parse_lines(self, diff_lines):
458 """
444 """
General Comments 0
You need to be logged in to leave comments. Login now