From a130a27fa07de4339cb728e0899f5f9f347739c8 Mon Sep 17 00:00:00 2001 From: Viresh Gupta Date: Sat, 5 May 2018 17:21:26 +0530 Subject: [PATCH] GitCommitBear: Add BitBucket type issue references Add support for BitBucket as a host and support it's limited issue referencing style. Closes https://github.com/coala/coala-bears/issues/1134 --- bears/vcs/git/GitCommitBear.py | 15 +++- tests/vcs/git/GitCommitBearTest.py | 128 ++++++++++++++++++++++++++++- 2 files changed, 140 insertions(+), 3 deletions(-) diff --git a/bears/vcs/git/GitCommitBear.py b/bears/vcs/git/GitCommitBear.py index 22414ee03d..9895a7db99 100644 --- a/bears/vcs/git/GitCommitBear.py +++ b/bears/vcs/git/GitCommitBear.py @@ -34,6 +34,10 @@ class GitCommitBear(GlobalBear): 'issue': r'(?:\w+/\w+)?#(\S+)', 'full issue': r'https?://gitlab\S+/issues/(\S+)', }, + 'bitbucket': { + 'issue': r'#(\d+)', + 'full issue': None, + }, } SUPPORTED_HOST_KEYWORD_REGEX = { 'github': (r'[Cc]lose[sd]?' @@ -41,7 +45,11 @@ class GitCommitBear(GlobalBear): r'|[Ff]ix(?:e[sd])?'), 'gitlab': (r'[Cc]los(?:e[sd]?|ing)' r'|[Rr]esolv(?:e[sd]?|ing)' - r'|[Ff]ix(?:e[sd]|ing)?') + r'|[Ff]ix(?:e[sd]|ing)?'), + 'bitbucket': (r'(?:[Cc]los(?:e[sd]?|ing)' + r'|[Rr]esolv(?:e[sd]?|ing)' + r'|[Ff]ix(?:e[sd]|ing)?' + r'(?:[ \t]+(?:bug|issue|ticket))?)'), } CONCATENATION_KEYWORDS = [r',', r'\sand\s'] @@ -324,6 +332,11 @@ def check_issue_reference(self, body, else: self.issue_type = 'issue' + if self.ISSUE_INFO[host][self.issue_type] is None: + yield Result(self, 'Host {} does not support {} ' + 'reference.'.format(host, self.issue_type)) + return + if body_close_issue_on_last_line: if body: body = body.splitlines()[-1] diff --git a/tests/vcs/git/GitCommitBearTest.py b/tests/vcs/git/GitCommitBearTest.py index 87f747cb34..99fbcdb4f8 100644 --- a/tests/vcs/git/GitCommitBearTest.py +++ b/tests/vcs/git/GitCommitBearTest.py @@ -300,14 +300,138 @@ def test_check_issue_reference(self): self.run_git_command('remote', 'add', 'test', 'https://bitbucket.com/user/repo.git') - # Unsupported Host - Bitbucket + # Unsupported Host and Issue reference combination - Bitbucket self.git_commit('Shortlog\n\n' 'First line, blablablablablabla.\n' 'Another line, blablablablablabla.\n' 'Closes #1112') self.assertEqual(self.run_uut( body_close_issue=True, - body_close_issue_full_url=True), []) + body_close_issue_full_url=True), + ['Host bitbucket does not support full issue ' + 'reference.']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closes #1112') + self.assertEqual(self.run_uut( + body_close_issue=True), []) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Resolves https://bitbucket.org/user/repo/issues/1/') + self.assertEqual(self.run_uut( + body_close_issue=True), + ['Invalid issue reference: ' + 'https://bitbucket.org/user/repo/issues/1/']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Resolves https://bitbucket.org/user/repo/issues/1/') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_close_issue_full_url=True), + ['Host bitbucket does not support full issue ' + 'reference.']) + + # Adding BitBucket's ssh remote for testing + self.run_git_command('remote', 'set-url', 'test', + 'git@bitbucket.org:user/repo.git') + + # Unsupported Host and Issue reference combination - Bitbucket + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closes #1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_close_issue_full_url=True), + ['Host bitbucket does not support full issue ' + 'reference.']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closes #1112') + self.assertEqual(self.run_uut( + body_close_issue=True), []) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Fix issue #1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), []) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Resolving bug#1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), + ['Invalid issue reference: bug#1112']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Fixed randomkeyword#1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), + ['Invalid issue reference: randomkeyword#1112']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closes#1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), + ['Body of HEAD commit does not contain any ' + 'issue reference.']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closes bug bug#1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), + ['Invalid issue reference: bug']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Closesticket #1112') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_enforce_issue_reference=True), + ['Body of HEAD commit does not contain any ' + 'issue reference.']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Resolves https://bitbucket.org/user/repo/issues/1/') + self.assertEqual(self.run_uut( + body_close_issue=True), + ['Invalid issue reference: ' + 'https://bitbucket.org/user/repo/issues/1/']) + + self.git_commit('Shortlog\n\n' + 'First line, blablablablablabla.\n' + 'Another line, blablablablablabla.\n' + 'Resolves https://bitbucket.org/user/repo/issues/1/') + self.assertEqual(self.run_uut( + body_close_issue=True, + body_close_issue_full_url=True), + ['Host bitbucket does not support full issue ' + 'reference.']) # Adding GitHub remote for testing, ssh way :P self.run_git_command('remote', 'set-url', 'test',