Skip to content

Commit 69333fa

Browse files
committed
Add multiline mode to pygrep
1 parent 2e6cd2a commit 69333fa

File tree

2 files changed

+20
-1
lines changed

2 files changed

+20
-1
lines changed

pre_commit/languages/pygrep.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,15 @@ def _process_filename_by_line(pattern, filename):
2626
output.write_line(line.rstrip(b'\r\n'))
2727
return retv
2828

29+
def _process_filename_at_once(pattern, filename):
30+
retv = 0
31+
with open(filename, 'rb') as f:
32+
match = pattern.search(f.read())
33+
if match:
34+
retv = 1
35+
output.write('{}:'.format(filename))
36+
output.write_line(match.group())
37+
return retv
2938

3039
def run_hook(prefix, hook, file_args):
3140
exe = (sys.executable, '-m', __name__)
@@ -42,6 +51,7 @@ def main(argv=None):
4251
),
4352
)
4453
parser.add_argument('-i', '--ignore-case', action='store_true')
54+
parser.add_argument('-z', '--null-data', action='store_true')
4555
parser.add_argument('pattern', help='python regex pattern.')
4656
parser.add_argument('filenames', nargs='*')
4757
args = parser.parse_args(argv)
@@ -51,7 +61,10 @@ def main(argv=None):
5161

5262
retv = 0
5363
for filename in args.filenames:
54-
retv |= _process_filename_by_line(pattern, filename)
64+
if args.null_data:
65+
retv |= _process_filename_at_once(pattern, filename)
66+
else:
67+
retv |= _process_filename_by_line(pattern, filename)
5568
return retv
5669

5770

tests/languages/pygrep_test.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,9 @@ def test_ignore_case(some_files, cap_out):
3838
out = cap_out.get()
3939
assert ret == 1
4040
assert out == 'f2:1:[INFO] hi\n'
41+
42+
def test_null_data(some_files, cap_out):
43+
ret = pygrep.main(('--null-data', r'foo.*bar', 'f1', 'f2', 'f3'))
44+
out = cap_out.get()
45+
assert ret == 1
46+
assert out == 'f1:foobar\n'

0 commit comments

Comments
 (0)