Skip to content

Commit edbe6e9

Browse files
evanscastonguayEvans Castonguay
andauthored
fix: handle /similar_issue on non-GitHub (#2158)
Co-authored-by: Evans Castonguay <[email protected]>
1 parent f654143 commit edbe6e9

File tree

2 files changed

+67
-3
lines changed

2 files changed

+67
-3
lines changed

pr_agent/tools/pr_similar_issue.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,13 @@
1717

1818
class PRSimilarIssue:
1919
def __init__(self, issue_url: str, ai_handler, args: list = None):
20-
if get_settings().config.git_provider != "github":
21-
raise Exception("Only github is supported for similar issue tool")
20+
self.issue_url = issue_url
21+
self.supported = get_settings().config.git_provider == "github"
22+
if not self.supported:
23+
return
2224

2325
self.cli_mode = get_settings().CONFIG.CLI_MODE
2426
self.max_issues_to_scan = get_settings().pr_similar_issue.max_issues_to_scan
25-
self.issue_url = issue_url
2627
self.git_provider = get_git_provider()()
2728
repo_name, issue_number = self.git_provider._parse_issue_url(issue_url.split('=')[-1])
2829
self.git_provider.repo = repo_name
@@ -257,6 +258,20 @@ def __init__(self, issue_url: str, ai_handler, args: list = None):
257258

258259

259260
async def run(self):
261+
if not self.supported:
262+
message = "The /similar_issue tool is currently supported only for GitHub."
263+
if get_settings().config.publish_output:
264+
try:
265+
from pr_agent.git_providers import get_git_provider_with_context
266+
267+
provider = get_git_provider_with_context(self.issue_url)
268+
provider.publish_comment(message)
269+
except Exception as e:
270+
get_logger().warning(
271+
"Failed to publish /similar_issue unsupported message",
272+
artifact={"error": str(e)},
273+
)
274+
return ""
260275
get_logger().info('Getting issue...')
261276
repo_name, original_issue_number = self.git_provider._parse_issue_url(self.issue_url.split('=')[-1])
262277
issue_main = self.git_provider.repo_obj.get_issue(original_issue_number)
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import pytest
2+
3+
from pr_agent.tools.pr_similar_issue import PRSimilarIssue
4+
5+
6+
@pytest.mark.asyncio
7+
async def test_similar_issue_non_github_publishes_message(monkeypatch):
8+
class FakeProvider:
9+
def __init__(self):
10+
self.comments = []
11+
12+
def publish_comment(self, body):
13+
self.comments.append(body)
14+
15+
fake_provider = FakeProvider()
16+
17+
class FakeSettings:
18+
class config:
19+
git_provider = "gitlab"
20+
publish_output = True
21+
22+
monkeypatch.setattr("pr_agent.tools.pr_similar_issue.get_settings", lambda: FakeSettings)
23+
monkeypatch.setattr(
24+
"pr_agent.git_providers.get_git_provider_with_context",
25+
lambda _: fake_provider,
26+
)
27+
28+
tool = PRSimilarIssue("https://gitlab.example.com/group/repo/-/merge_requests/1", None)
29+
result = await tool.run()
30+
31+
assert result == ""
32+
assert fake_provider.comments == [
33+
"The /similar_issue tool is currently supported only for GitHub."
34+
]
35+
36+
37+
@pytest.mark.asyncio
38+
async def test_similar_issue_non_github_no_publish(monkeypatch):
39+
class FakeSettings:
40+
class config:
41+
git_provider = "gitlab"
42+
publish_output = False
43+
44+
monkeypatch.setattr("pr_agent.tools.pr_similar_issue.get_settings", lambda: FakeSettings)
45+
46+
tool = PRSimilarIssue("https://gitlab.example.com/group/repo/-/merge_requests/1", None)
47+
result = await tool.run()
48+
49+
assert result == ""

0 commit comments

Comments
 (0)