BB Server fixes. Fix ID not being retrieved, inline comments, url generation, and pr review not working

This commit is contained in:
MarkRx
2024-05-30 10:05:00 -04:00
parent 6e6f54933e
commit ee90f38501

View File

@ -1,13 +1,13 @@
import json import json
from typing import Optional, Tuple from typing import Optional, Tuple
from urllib.parse import urlparse from urllib.parse import quote_plus, urlparse
import requests import requests
from atlassian.bitbucket import Bitbucket from atlassian.bitbucket import Bitbucket
from starlette_context import context from starlette_context import context
from .git_provider import GitProvider from .git_provider import GitProvider
from pr_agent.algo.types import FilePatchInfo from pr_agent.algo.types import EDIT_TYPE, FilePatchInfo
from ..algo.utils import load_large_diff, find_line_number_of_relevant_line_in_file from ..algo.utils import load_large_diff, find_line_number_of_relevant_line_in_file
from ..config_loader import get_settings from ..config_loader import get_settings
from ..log import get_logger from ..log import get_logger
@ -59,6 +59,9 @@ class BitbucketServerProvider(GitProvider):
except Exception: except Exception:
return "" return ""
def get_pr_id(self):
return self.pr_num
def publish_code_suggestions(self, code_suggestions: list) -> bool: def publish_code_suggestions(self, code_suggestions: list) -> bool:
""" """
Publishes code suggestions as comments on the PR. Publishes code suggestions as comments on the PR.
@ -140,14 +143,8 @@ class BitbucketServerProvider(GitProvider):
if self.diff_files: if self.diff_files:
return self.diff_files return self.diff_files
commits_in_pr = self.bitbucket_client.get_pull_requests_commits( base_sha = self.pr.toRef['latestCommit']
self.workspace_slug, head_sha = self.pr.fromRef['latestCommit']
self.repo_slug,
self.pr_num
)
commit_list = list(commits_in_pr)
base_sha, head_sha = commit_list[0]['parents'][0]['id'], commit_list[-1]['id']
diff_files = [] diff_files = []
original_file_content_str = "" original_file_content_str = ""
@ -242,7 +239,7 @@ class BitbucketServerProvider(GitProvider):
} }
response = requests.post(url=self._get_pr_comments_url(), json=payload, headers=self.headers) response = requests.post(url=self._get_pr_comments_url(), json=payload, headers=self.headers)
return response response.raise_for_status()
def generate_link_to_relevant_line_number(self, suggestion) -> str: def generate_link_to_relevant_line_number(self, suggestion) -> str:
try: try:
@ -256,7 +253,7 @@ class BitbucketServerProvider(GitProvider):
(diff_files, relevant_file, relevant_line_str) (diff_files, relevant_file, relevant_line_str)
if absolute_position != -1 and self.pr_url: if absolute_position != -1 and self.pr_url:
link = f"{self.pr_url}/#L{relevant_file}T{absolute_position}" link = f"{self.pr_url}/diff#{quote_plus(relevant_file)}?t={absolute_position}"
return link return link
except Exception as e: except Exception as e:
if get_settings().config.verbosity_level >= 2: if get_settings().config.verbosity_level >= 2:
@ -266,7 +263,15 @@ class BitbucketServerProvider(GitProvider):
def publish_inline_comments(self, comments: list[dict]): def publish_inline_comments(self, comments: list[dict]):
for comment in comments: for comment in comments:
if 'position' in comment:
self.publish_inline_comment(comment['body'], comment['position'], comment['path']) self.publish_inline_comment(comment['body'], comment['position'], comment['path'])
elif 'start_line' in comment: # multi-line comment
# note that bitbucket does not seem to support range - only a comment on a single line - https://community.developer.atlassian.com/t/api-post-endpoint-for-inline-pull-request-comments/60452
self.publish_inline_comment(comment['body'], comment['start_line'], comment['path'])
elif 'line' in comment: # single-line comment
self.publish_inline_comment(comment['body'], comment['line'], comment['path'])
else:
get_logger().error(f"Could not publish inline comment {comment}")
def get_title(self): def get_title(self):
return self.pr.title return self.pr.title
@ -278,7 +283,10 @@ class BitbucketServerProvider(GitProvider):
return self.pr.fromRef['displayId'] return self.pr.fromRef['displayId']
def get_pr_description_full(self): def get_pr_description_full(self):
if hasattr(self.pr, "description"):
return self.pr.description return self.pr.description
else:
return None
def get_user_id(self): def get_user_id(self):
return 0 return 0
@ -334,13 +342,14 @@ class BitbucketServerProvider(GitProvider):
raise NotImplementedError("Get commit messages function not implemented yet.") raise NotImplementedError("Get commit messages function not implemented yet.")
# bitbucket does not support labels # bitbucket does not support labels
def publish_description(self, pr_title: str, description: str): def publish_description(self, pr_title: str, description: str):
payload = json.dumps({ payload = {
"version": self.pr.version,
"description": description, "description": description,
"title": pr_title "title": pr_title,
}) "reviewers": self.pr.reviewers # needs to be sent otherwise gets wiped
}
response = requests.put(url=self.bitbucket_pull_request_api_url, headers=self.headers, data=payload) self.bitbucket_client.update_pull_request(self.workspace_slug, self.repo_slug, str(self.pr_num), payload)
return response
# bitbucket does not support labels # bitbucket does not support labels
def publish_labels(self, pr_types: list): def publish_labels(self, pr_types: list):