# HG changeset patch # User Mads Kiilerich # Date 1418647656 -3600 # Node ID fbb992c719aa7fcee618415d7ed69082593d0fa8 # Parent 97ed7d05d3d2c5d03ebf027f62105288e0b06bfa diff: don't split lines on bare CR as python splitlines do The line count from the @@ lines and the actual count would get out of sync and an incomplete diff would be shown. This is slower than native splitlines ... but that is what it takes to handle it correctly. (Except that we perhaps could use .split('\n') and patch the result ...) diff -r 97ed7d05d3d2 -r fbb992c719aa kallithea/lib/diffs.py --- a/kallithea/lib/diffs.py Mon Dec 15 13:47:36 2014 +0100 +++ b/kallithea/lib/diffs.py Mon Dec 15 13:47:36 2014 +0100 @@ -363,7 +363,7 @@ rest = diff_chunk[match.end():] if rest and not rest.startswith('@') and not rest.startswith('literal '): raise Exception('cannot parse diff header: %r followed by %r' % (diff_chunk[:match.end()], rest[:1000])) - difflines = imap(self._escaper, rest.splitlines(True)) + difflines = imap(self._escaper, re.findall(r'.*\n|.+$', rest)) # don't split on \r as str.splitlines do return groups, difflines def _clean_line(self, line, command): diff -r 97ed7d05d3d2 -r fbb992c719aa kallithea/tests/fixtures/hg_diff_rename_space_cr.diff --- a/kallithea/tests/fixtures/hg_diff_rename_space_cr.diff Mon Dec 15 13:47:36 2014 +0100 +++ b/kallithea/tests/fixtures/hg_diff_rename_space_cr.diff Mon Dec 15 13:47:36 2014 +0100 @@ -3,7 +3,7 @@ rename to oh yes --- a/oh no +++ b/oh yes -@@ -1,5 +1,6 @@ +@@ -1,4 +1,4 @@ 1 -2 + 2 -3 diff -r 97ed7d05d3d2 -r fbb992c719aa kallithea/tests/models/test_diff_parsers.py --- a/kallithea/tests/models/test_diff_parsers.py Mon Dec 15 13:47:36 2014 +0100 +++ b/kallithea/tests/models/test_diff_parsers.py Mon Dec 15 13:47:36 2014 +0100 @@ -249,7 +249,7 @@ ], 'hg_diff_rename_space_cr.diff': [ ('oh yes', 'R', - {'added': 4, + {'added': 3, 'deleted': 2, 'binary': False, 'ops': {RENAMED_FILENODE: 'file renamed from oh no to oh yes'}}),