Mercurial > kallithea
changeset 7167:b4a5632733d9 stable
vcs: Fix internal server error when trying to get diff from Mercurial for paths that include globbing patterns (Issue #308):
- Treat passed-in paths as exact matches, dissallowing any type of
globbing/regex/pattern matching.
- Added accompanying tests.
author | Branko Majic <branko@majic.rs> |
---|---|
date | Tue, 13 Feb 2018 16:23:55 +0100 |
parents | 55d2b08d9c44 |
children | 8f3469917832 3b36ca511518 |
files | kallithea/lib/vcs/backends/hg/repository.py kallithea/tests/vcs/test_repository.py |
diffstat | 2 files changed, 37 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/kallithea/lib/vcs/backends/hg/repository.py Fri Feb 09 18:12:19 2018 +0100 +++ b/kallithea/lib/vcs/backends/hg/repository.py Tue Feb 13 16:23:55 2018 +0100 @@ -265,7 +265,7 @@ self.get_changeset(rev1) self.get_changeset(rev2) if path: - file_filter = match(self.path, '', [path]) + file_filter = match(self.path, '', [path], exact=True) else: file_filter = None
--- a/kallithea/tests/vcs/test_repository.py Fri Feb 09 18:12:19 2018 +0100 +++ b/kallithea/tests/vcs/test_repository.py Tue Feb 13 16:23:55 2018 +0100 @@ -79,6 +79,14 @@ ], 'removed': [FileNode('foobar')], }, + { + 'message': u'Commit that contains glob pattern in filename', + 'author': 'Jane Doe <jane.doe@example.com>', + 'date': datetime.datetime(2010, 1, 1, 22), + 'added': [ + FileNode('README{', content='Strangely-named README file'), + ], + }, ] return commits @@ -86,6 +94,11 @@ with self.assertRaises(ChangesetDoesNotExistError): self.repo.get_diff('a' * 40, 'b' * 40) + def test_glob_patterns_in_filename_do_not_raise_exception(self): + revs = self.repo.revisions + + diff = self.repo.get_diff(revs[2], revs[3], path='README{') # should not raise + class GitRepositoryGetDiffTest(RepositoryGetDiffTest, unittest.TestCase): backend_alias = 'git' @@ -153,6 +166,18 @@ +FOOBAR ''') + def test_fourth_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[2], revs[3]), '''diff --git a/README{ b/README{ +new file mode 100644 +index 0000000000000000000000000000000000000000..cdc0c1b5d234feedb37bbac19cd1b6442061102d +--- /dev/null ++++ b/README{ +@@ -0,0 +1 @@ ++Strangely-named README file +\ No newline at end of file +''') + class HgRepositoryGetDiffTest(RepositoryGetDiffTest, unittest.TestCase): backend_alias = 'hg' @@ -214,6 +239,17 @@ +FOOBAR ''') + def test_fourth_changeset_diff(self): + revs = self.repo.revisions + self.assertEqual(self.repo.get_diff(revs[2], revs[3]), '''diff --git a/README{ b/README{ +new file mode 100644 +--- /dev/null ++++ b/README{ +@@ -0,0 +1,1 @@ ++Strangely-named README file +\ No newline at end of file +''') + # For each backend create test case class for alias in SCM_TESTS: