diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 27575f2a..ec7a66ed 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -32,8 +32,10 @@ class BitbucketProvider(GitProvider): self.repo = None self.pr_num = None self.pr = None + self.pr_url = pr_url self.temp_comments = [] self.incremental = incremental + self.diff_files = None if pr_url: self.set_pr(pr_url) self.bitbucket_comment_api_url = self.pr._BitbucketBase__data["links"]["comments"]["href"] @@ -116,6 +118,9 @@ class BitbucketProvider(GitProvider): return [diff.new.path for diff in self.pr.diffstat()] def get_diff_files(self) -> list[FilePatchInfo]: + if self.diff_files: + return self.diff_files + diffs = self.pr.diffstat() diff_split = [ "diff --git%s" % x for x in self.pr.diff().split("diff --git") if x.strip() @@ -135,6 +140,7 @@ class BitbucketProvider(GitProvider): diff.new.path, ) ) + self.diff_files = diff_files return diff_files def publish_comment(self, pr_comment: str, is_temporary: bool = False): @@ -183,6 +189,26 @@ class BitbucketProvider(GitProvider): ) return response + def generate_link_to_relevant_line_number(self, suggestion) -> str: + try: + relevant_file = suggestion['relevant file'].strip('`').strip("'") + relevant_line_str = suggestion['relevant line'] + if not relevant_line_str: + return "" + + diff_files = self.get_diff_files() + position, absolute_position = find_line_number_of_relevant_line_in_file \ + (diff_files, relevant_file, relevant_line_str) + + if absolute_position != -1 and self.pr_url: + link = f"{self.pr_url}/#L{relevant_file}T{absolute_position}" + return link + except Exception as e: + if get_settings().config.verbosity_level >= 2: + get_logger().info(f"Failed adding line link, error: {e}") + + return "" + def publish_inline_comments(self, comments: list[dict]): for comment in comments: self.publish_inline_comment(comment['body'], comment['position'], comment['path']) diff --git a/pr_agent/tools/pr_reviewer.py b/pr_agent/tools/pr_reviewer.py index 7cf561e2..b5091a6a 100644 --- a/pr_agent/tools/pr_reviewer.py +++ b/pr_agent/tools/pr_reviewer.py @@ -217,19 +217,6 @@ class PRReviewer: suggestion['relevant line'] = f"[{suggestion['relevant line']}]({link})" else: pass - # try: - # relevant_file = suggestion['relevant file'].strip('`').strip("'") - # relevant_line_str = suggestion['relevant line'] - # if not relevant_line_str: - # return "" - # - # position, absolute_position = find_line_number_of_relevant_line_in_file( - # self.git_provider.diff_files, relevant_file, relevant_line_str) - # if absolute_position != -1: - # suggestion[ - # 'relevant line'] = f"{suggestion['relevant line']} (line {absolute_position})" - # except: - # pass # Add incremental review section