From 734a0277025cce351f7b7ddb83e3174cdf77df70 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Thu, 11 Jul 2024 18:21:21 +0300 Subject: [PATCH] azure fix --- .../git_providers/azuredevops_provider.py | 26 ++++++++++++++++--- pr_agent/git_providers/git_provider.py | 3 +++ pr_agent/tools/pr_code_suggestions.py | 9 +++++-- 3 files changed, 33 insertions(+), 5 deletions(-) diff --git a/pr_agent/git_providers/azuredevops_provider.py b/pr_agent/git_providers/azuredevops_provider.py index 1ac153d4..4709c05a 100644 --- a/pr_agent/git_providers/azuredevops_provider.py +++ b/pr_agent/git_providers/azuredevops_provider.py @@ -130,6 +130,18 @@ class AzureDevopsProvider(GitProvider): def get_pr_description_full(self) -> str: return self.pr.description + def delete_comment(self, comment): + try: + self.azure_devops_client.delete_comment( + repository_id=self.repo_slug, + pull_request_id=self.pr_num, + thread_id=comment.thread_id, + comment_id=comment.id, + project=self.workspace_slug, + ) + except Exception as e: + get_logger().exception(f"Failed to delete comment, error: {e}") + def edit_comment(self, comment, body: str): try: self.azure_devops_client.update_comment( @@ -525,10 +537,18 @@ class AzureDevopsProvider(GitProvider): def get_user_id(self): return 0 + def get_issue_comments(self): - raise NotImplementedError( - "Azure DevOps provider does not support issue comments yet" - ) + threads = self.azure_devops_client.get_threads(repository_id=self.repo_slug, pull_request_id=self.pr_num, project=self.workspace_slug) + threads.reverse() + comment_list = [] + for thread in threads: + for comment in thread.comments: + if comment.content and comment not in comment_list: + comment.body = comment.content + comment.thread_id = thread.id + comment_list.append(comment) + return comment_list def add_eyes_reaction(self, issue_comment_id: int, disable_eyes: bool = False) -> Optional[int]: return True diff --git a/pr_agent/git_providers/git_provider.py b/pr_agent/git_providers/git_provider.py index aef129a5..073973eb 100644 --- a/pr_agent/git_providers/git_provider.py +++ b/pr_agent/git_providers/git_provider.py @@ -193,6 +193,9 @@ class GitProvider(ABC): def get_comment_url(self, comment) -> str: return "" + def delete_comment(self, comment): + comment.delete() + #### labels operations #### @abstractmethod def publish_labels(self, labels): diff --git a/pr_agent/tools/pr_code_suggestions.py b/pr_agent/tools/pr_code_suggestions.py index c028b457..10fc47b4 100644 --- a/pr_agent/tools/pr_code_suggestions.py +++ b/pr_agent/tools/pr_code_suggestions.py @@ -11,7 +11,8 @@ from pr_agent.algo.pr_processing import get_pr_diff, get_pr_multi_diffs, retry_w from pr_agent.algo.token_handler import TokenHandler from pr_agent.algo.utils import load_yaml, replace_code_tags, ModelType, show_relevant_configurations from pr_agent.config_loader import get_settings -from pr_agent.git_providers import get_git_provider, get_git_provider_with_context, GithubProvider, GitLabProvider +from pr_agent.git_providers import get_git_provider, get_git_provider_with_context, GithubProvider, GitLabProvider, \ + AzureDevopsProvider from pr_agent.git_providers.git_provider import get_main_pr_language from pr_agent.log import get_logger from pr_agent.servers.help import HelpMessage @@ -176,6 +177,10 @@ class PRCodeSuggestions: final_update_message=True, max_previous_comments=4, progress_response=None): + if isinstance(self.git_provider,AzureDevopsProvider): + self.git_provider.publish_comment(pr_comment) + return + history_header = f"#### Previous suggestions\n" last_commit_num = self.git_provider.get_latest_commit_url().split('/')[-1][:7] latest_suggestion_header = f"Latest suggestions up to {last_commit_num}" @@ -248,7 +253,7 @@ class PRCodeSuggestions: get_logger().info(f"Persistent mode - updating comment {comment_url} to latest {name} message") if progress_response: # publish to 'progress_response' comment, because it refreshes immediately self.git_provider.edit_comment(progress_response, pr_comment_updated) - comment.delete() + self.git_provider.delete_comment(comment) else: self.git_provider.edit_comment(comment, pr_comment_updated) return