Skip to content

Commit bfb0eed

Browse files
committed
Merge branch 'dirdiff.remove_blank_lines' into 'master'
dirdiff.remove_blank_lines - make remove blank lines runs faster See merge request GNOME/meld!16
2 parents 7977b4c + e246a54 commit bfb0eed

2 files changed

Lines changed: 38 additions & 10 deletions

File tree

meld/dirdiff.py

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -83,11 +83,11 @@ def shallow_equal(self, other, time_resolution_ns):
8383

8484

8585
def remove_blank_lines(text):
86-
splits = text.splitlines()
87-
lines = text.splitlines(True)
88-
blanks = set([i for i, l in enumerate(splits) if not l])
89-
lines = [l for i, l in enumerate(lines) if i not in blanks]
90-
return b''.join(lines)
86+
"""
87+
Remove blank lines from text.
88+
And normalize line ending
89+
"""
90+
return b'\n'.join(filter(bool, text.splitlines()))
9191

9292

9393
def _files_same(files, regexes, comparison_args):
@@ -184,13 +184,12 @@ def _files_same(files, regexes, comparison_args):
184184
if result == Different and need_contents:
185185
contents = [b"".join(c) for c in contents]
186186
# For probable text files, discard newline differences to match
187-
# file comparisons.
188-
contents = [b"\n".join(c.splitlines()) for c in contents]
189-
190-
contents = [misc.apply_text_filters(c, regexes) for c in contents]
191-
192187
if ignore_blank_lines:
193188
contents = [remove_blank_lines(c) for c in contents]
189+
else:
190+
contents = [b"\n".join(c.splitlines()) for c in contents]
191+
192+
contents = [misc.apply_text_filters(c, regexes) for c in contents]
194193
result = SameFiltered if all_same(contents) else Different
195194

196195
_cache[cache_key] = CacheResult(stats, result)
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import pytest
2+
from meld.dirdiff import remove_blank_lines
3+
4+
@pytest.mark.parametrize('txt, expected', [
5+
# blank to be equal blank
6+
(b'', b''),
7+
# one line with spaces
8+
(b' ', b' '),
9+
# two lines empty
10+
(b'\n', b''),
11+
(b'\n ', b' '),
12+
(b' \n', b' '),
13+
(b' \n ', b' \n '),
14+
# tree lines empty
15+
(b'\n\n', b''),
16+
(b'\n\n ', b' '),
17+
(b'\n \n', b' '),
18+
(b'\n \n ', b' \n '),
19+
(b' \n \n ', b' \n \n '),
20+
# one line with space and content
21+
(b' content', b' content'),
22+
# empty line between content
23+
(b'content\n\ncontent', b'content\ncontent'),
24+
# multiple leading and trailing newlines
25+
(b'\n\n\ncontent\n\n\ncontent\n\n\n', b'content\ncontent'),
26+
])
27+
def test_remove_blank_lines(txt, expected):
28+
result = remove_blank_lines(txt)
29+
assert result == expected

0 commit comments

Comments
 (0)