From 94cb6b9795df1ea2a5c95d7c3a21a145a8c0a557 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Wed, 15 Nov 2023 09:06:26 +0200 Subject: [PATCH] more feedback --- pr_agent/git_providers/bitbucket_provider.py | 9 +++++---- pr_agent/git_providers/git_provider.py | 2 +- pr_agent/git_providers/github_provider.py | 12 ++++++++---- pr_agent/git_providers/gitlab_provider.py | 9 +++++---- pr_agent/tools/pr_description.py | 3 +++ pr_agent/tools/pr_reviewer.py | 7 +++++-- 6 files changed, 27 insertions(+), 15 deletions(-) diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 47f2b32a..bef33ae5 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -153,13 +153,14 @@ class BitbucketProvider(GitProvider): self.diff_files = diff_files return diff_files - def publish_persistent_comment(self, pr_comment: str, initial_text: str, updated_text: str): + def publish_persistent_comment(self, pr_comment: str, initial_header: str, update_header: str = True): try: for comment in self.pr.comments(): body = comment.raw - if initial_text in body: - if updated_text: - pr_comment_updated = pr_comment.replace(initial_text, updated_text) + if initial_header in body: + if update_header: + updated_header = f"{initial_header}\n\n ### (updated)\n" + pr_comment_updated = pr_comment.replace(initial_header, updated_header) else: pr_comment_updated = pr_comment d = {"content": {"raw": pr_comment_updated}} diff --git a/pr_agent/git_providers/git_provider.py b/pr_agent/git_providers/git_provider.py index 4a41e252..98b6e4f1 100644 --- a/pr_agent/git_providers/git_provider.py +++ b/pr_agent/git_providers/git_provider.py @@ -44,7 +44,7 @@ class GitProvider(ABC): def publish_comment(self, pr_comment: str, is_temporary: bool = False): pass - def publish_persistent_comment(self, pr_comment: str, initial_text: str, updated_text: str): + def publish_persistent_comment(self, pr_comment: str, initial_header: str, update_header: bool): self.publish_comment(pr_comment) @abstractmethod diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index c0b9cc11..52924725 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -154,16 +154,20 @@ class GithubProvider(GitProvider): def publish_description(self, pr_title: str, pr_body: str): self.pr.edit(title=pr_title, body=pr_body) - def publish_persistent_comment(self, pr_comment: str, initial_text: str, updated_text: str): + def publish_persistent_comment(self, pr_comment: str, initial_header: str, update_header: bool=True): prev_comments = list(self.pr.get_issue_comments()) for comment in prev_comments: body = comment.body - if body.startswith(initial_text): - if updated_text: - pr_comment_updated = pr_comment.replace(initial_text, updated_text) + if body.startswith(initial_header): + latest_commit = self.pr.get_commits().reversed[0].html_url + if update_header: + updated_text = f"{initial_header}\n\n### (review updated to commit {latest_commit})\n" + pr_comment_updated = pr_comment.replace(initial_header, updated_text) else: pr_comment_updated = pr_comment + get_logger().info(f"Persistent mode- updating comment {comment.html_url} to latest review message") response = comment.edit(pr_comment_updated) + self.publish_comment(f"**[Persistent review]({comment.html_url})** updated to latest commit {latest_commit}") return self.publish_comment(pr_comment) diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index 396483a5..a4d2090c 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -136,12 +136,13 @@ class GitLabProvider(GitProvider): except Exception as e: get_logger().exception(f"Could not update merge request {self.id_mr} description: {e}") - def publish_persistent_comment(self, pr_comment: str, initial_text: str, updated_text: str): + def publish_persistent_comment(self, pr_comment: str, initial_header: str, update_header: str = True): try: for comment in self.mr.notes.list(get_all=True)[::-1]: - if comment.body.startswith(initial_text): - if updated_text: - pr_comment_updated = pr_comment.replace(initial_text, updated_text) + if comment.body.startswith(initial_header): + if update_header: + updated_header = f"{initial_header}\n\n ### (updated)\n" + pr_comment_updated = pr_comment.replace(initial_header, updated_header) else: pr_comment_updated = pr_comment response = self.mr.notes.update(comment.id, {'body': pr_comment_updated}) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 611523ea..47e3f03f 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -158,6 +158,9 @@ class PRDescription: user=user_prompt ) + if get_settings().config.verbosity_level >= 2: + get_logger().info(f"\nAI response:\n{response}") + return response def _prepare_data(self): diff --git a/pr_agent/tools/pr_reviewer.py b/pr_agent/tools/pr_reviewer.py index 5b8e5472..7a839ce0 100644 --- a/pr_agent/tools/pr_reviewer.py +++ b/pr_agent/tools/pr_reviewer.py @@ -121,8 +121,8 @@ class PRReviewer: # publish the review if get_settings().pr_reviewer.persistent_comment and not self.incremental.is_incremental: self.git_provider.publish_persistent_comment(pr_comment, - initial_text="## PR Analysis", - updated_text="## PR Analysis (updated)") + initial_header="## PR Analysis", + update_header=True) else: self.git_provider.publish_comment(pr_comment) @@ -178,6 +178,9 @@ class PRReviewer: user=user_prompt ) + if get_settings().config.verbosity_level >= 2: + get_logger().info(f"\nAI response:\n{response}") + return response def _prepare_pr_review(self) -> str: