From 72ecb1ca5ac382375c0473ea53c263cbd36e14a8 Mon Sep 17 00:00:00 2001 From: Francesco Siddi Date: Fri, 28 Nov 2014 12:09:40 +0100 Subject: [PATCH] Test for broken regex in bamignore --- client/cli/bam.py | 11 ++++++++--- tests/test_cli.py | 20 ++++++++++++++++++++ 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/client/cli/bam.py b/client/cli/bam.py index 2fb056b..36091a5 100755 --- a/client/cli/bam.py +++ b/client/cli/bam.py @@ -163,13 +163,18 @@ class bam_config: if os.path.isfile(bamignore): with open(bamignore, 'r') as f: patterns = f.read().split("\n") + import re + try: + compiled_patterns = [re.compile(p) for p in patterns] + except re.error: + fatal("Your .bamignore file contains invalid regular expressions") + def filter_ignore(f): - import re - for pattern in filter_ignore.patterns: + for pattern in filter_ignore.compiled_patterns: if re.match(pattern, f): return False return True - filter_ignore.patterns = patterns + filter_ignore.compiled_patterns = compiled_patterns return filter_ignore else: diff --git a/tests/test_cli.py b/tests/test_cli.py index bc1112e..1c90740 100755 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -1045,6 +1045,26 @@ class BamIgnoreTest(BamSessionTestCase): self.assertEqual("Nothing to commit!\n", stdout) + def test_invalid_ignore(self): + session_name = "mysession" + file_name = "testfile.txt" + file_data = b"hello world!\n" + + # A failing regex that breaks syntax highlight as nice side effect + file_data_bamignore = r"""(""" + + proj_path, session_path = self.init_session(session_name) + + # write the .bamignore in the session root + file_quick_write(proj_path, ".bamignore", file_data_bamignore) + + # create some files + file_quick_write(session_path, file_name, file_data) + + # now check for status + self.assertRaises(RuntimeError, bam_run, ["status",], session_path) + + if __name__ == '__main__': data = global_setup() unittest.main(exit=False)