From 5477469a91f1d39dce1364ac1d1063c494f224ba Mon Sep 17 00:00:00 2001 From: idavidov Date: Sat, 19 Aug 2023 15:06:22 +0300 Subject: [PATCH] in order to have exact sha's we have to find correct diff for this change otherwise gitlab web doesn't able show diff on page and return 500 or 400 errors based on different scenarios --- pr_agent/git_providers/gitlab_provider.py | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index 73a3a2f9..94b40c92 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -155,7 +155,8 @@ class GitLabProvider(GitProvider): if not found: logging.info(f"Could not find position for {relevant_file} {relevant_line_in_file}") else: - d = self.last_diff + # in order to have exact sha's we have to find correct diff for this change + d = self.get_relevant_diff(relevant_file, relevant_line_in_file) pos_obj = {'position_type': 'text', 'new_path': target_file.filename, 'old_path': target_file.old_filename if target_file.old_filename else target_file.filename, @@ -171,6 +172,14 @@ class GitLabProvider(GitProvider): self.mr.discussions.create({'body': body, 'position': pos_obj}) + def get_relevant_diff(self, relevant_file, relevant_line_in_file): + for d in self.mr.diffs.list(get_all=True): + changes = self.mr.changes() # Retrieve the changes for the merge request + for change in changes['changes']: + if change['new_path'] == relevant_file and relevant_line_in_file in change['diff']: + return d + return self.last_diff # fallback to last_diff if no relevant diff is found + def publish_code_suggestions(self, code_suggestions: list): for suggestion in code_suggestions: try: