Skip to content

Commit

Permalink
Add error handling for missing GitLab URL and improve inline comment …
Browse files Browse the repository at this point in the history
…logic in gitlab_provider.py
  • Loading branch information
mrT23 committed Aug 13, 2024
1 parent f89bdcf commit a3b3d6c
Showing 1 changed file with 38 additions and 12 deletions.
50 changes: 38 additions & 12 deletions pr_agent/git_providers/gitlab_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ def __init__(self, merge_request_url: Optional[str] = None, incremental: Optiona
gitlab_url = get_settings().get("GITLAB.URL", None)
if not gitlab_url:
raise ValueError("GitLab URL is not set in the config file")
self.gitlab_url = gitlab_url
gitlab_access_token = get_settings().get("GITLAB.PERSONAL_ACCESS_TOKEN", None)
if not gitlab_access_token:
raise ValueError("GitLab personal access token is not set in the config file")
Expand Down Expand Up @@ -227,8 +228,9 @@ def get_comment_body_from_comment_id(self, comment_id: int):
comment = self.mr.notes.get(comment_id).body
return comment

def send_inline_comment(self,body: str,edit_type: str,found: bool,relevant_file: str,relevant_line_in_file: int,
source_line_no: int, target_file: str,target_line_no: int, original_suggestion) -> None:
def send_inline_comment(self, body: str, edit_type: str, found: bool, relevant_file: str,
relevant_line_in_file: str,
source_line_no: int, target_file: str, target_line_no: int, original_suggestion) -> None:
if not found:
get_logger().info(f"Could not find position for {relevant_file} {relevant_line_in_file}")
else:
Expand All @@ -254,13 +256,28 @@ def send_inline_comment(self,body: str,edit_type: str,found: bool,relevant_file:
except Exception as e:
try:
# fallback - create a general note on the file in the MR
line_start = original_suggestion['suggestion_orig_location']['start_line']
line_end = original_suggestion['suggestion_orig_location']['end_line']
old_code_snippet = original_suggestion['prev_code_snippet']
new_code_snippet = original_suggestion['new_code_snippet']
content = original_suggestion['suggestion_summary']
label = original_suggestion['category']
score = original_suggestion['score']
if 'suggestion_orig_location' in original_suggestion:
line_start = original_suggestion['suggestion_orig_location']['start_line']
line_end = original_suggestion['suggestion_orig_location']['end_line']
old_code_snippet = original_suggestion['prev_code_snippet']
new_code_snippet = original_suggestion['new_code_snippet']
content = original_suggestion['suggestion_summary']
label = original_suggestion['category']
if 'score' in original_suggestion:
score = original_suggestion['score']
else:
score = 7
else:
line_start = original_suggestion['relevant_lines_start']
line_end = original_suggestion['relevant_lines_end']
old_code_snippet = original_suggestion['existing_code']
new_code_snippet = original_suggestion['improved_code']
content = original_suggestion['suggestion_content']
label = original_suggestion['label']
if 'score' in original_suggestion:
score = original_suggestion['score']
else:
score = 7

if hasattr(self, 'main_language'):
language = self.main_language
Expand All @@ -287,9 +304,9 @@ def send_inline_comment(self,body: str,edit_type: str,found: bool,relevant_file:
# get_logger().debug(
# f"Failed to create comment in MR {self.id_mr} with position {pos_obj} (probably not a '+' line)")
except Exception as e:
get_logger().exception(f"Failed to create comment in MR {self.id_mr} with position {pos_obj}: {e}")
get_logger().exception(f"Failed to create comment in MR {self.id_mr}")

def get_relevant_diff(self, relevant_file: str, relevant_line_in_file: int) -> Optional[dict]:
def get_relevant_diff(self, relevant_file: str, relevant_line_in_file: str) -> Optional[dict]:
changes = self.mr.changes() # Retrieve the changes for the merge request once
if not changes:
get_logger().error('No changes found for the merge request.')
Expand Down Expand Up @@ -330,7 +347,7 @@ def publish_code_suggestions(self, code_suggestions: list) -> bool:
# edit_type, found, source_line_no, target_file, target_line_no = self.find_in_file(target_file,
# relevant_line_in_file)
# for code suggestions, we want to edit the new code
source_line_no = None
source_line_no = -1
target_line_no = relevant_lines_start + 1
found = True
edit_type = 'addition'
Expand Down Expand Up @@ -423,6 +440,15 @@ def get_languages(self):
def get_pr_branch(self):
return self.mr.source_branch

def get_pr_owner_id(self) -> str | None:
if not self.gitlab_url or 'gitlab.com' in self.gitlab_url:
if not self.id_project:
return None
return self.id_project.split('/')[0]
# extract host name
host = urlparse(self.gitlab_url).hostname
return host

def get_pr_description_full(self):
return self.mr.description

Expand Down

0 comments on commit a3b3d6c

Please sign in to comment.