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 = |
|
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 |
|
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 |
|
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 |
|
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