Add error handling for empty diff files in utils.py and optimize file content retrieval in Bitbucket provider

This commit is contained in:
mrT23
2024-08-13 22:33:07 +03:00
parent a3b3d6c77a
commit 86a9cfedc8
2 changed files with 19 additions and 6 deletions

View File

@ -781,6 +781,9 @@ def find_line_number_of_relevant_line_in_file(diff_files: List[FilePatchInfo],
re_hunk_header = re.compile(
r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[ ]?(.*)")
if not diff_files:
return position, absolute_position
for file in diff_files:
if file.filename and (file.filename.strip() == relevant_file):
patch = file.patch

View File

@ -12,7 +12,7 @@ from ..algo.language_handler import is_valid_file
from ..algo.utils import find_line_number_of_relevant_line_in_file
from ..config_loader import get_settings
from ..log import get_logger
from .git_provider import GitProvider
from .git_provider import GitProvider, MAX_FILES_ALLOWED_FULL
def _gef_filename(diff):
@ -198,6 +198,7 @@ class BitbucketProvider(GitProvider):
invalid_files_names = []
diff_files = []
counter_valid = 0
for index, diff in enumerate(diffs):
file_path = _gef_filename(diff)
if not is_valid_file(file_path):
@ -205,13 +206,22 @@ class BitbucketProvider(GitProvider):
continue
try:
if diff.old.get_data("links"):
original_file_content_str = self._get_pr_file_content(diff.old.get_data("links")['self']['href'])
counter_valid += 1
if counter_valid < MAX_FILES_ALLOWED_FULL // 2: # factor 2 because bitbucket has limited API calls
if diff.old.get_data("links"):
original_file_content_str = self._get_pr_file_content(
diff.old.get_data("links")['self']['href'])
else:
original_file_content_str = ""
if diff.new.get_data("links"):
new_file_content_str = self._get_pr_file_content(diff.new.get_data("links")['self']['href'])
else:
new_file_content_str = ""
else:
if counter_valid == MAX_FILES_ALLOWED_FULL // 2:
get_logger().info(
f"Bitbucket too many files in PR, will avoid loading full content for rest of files")
original_file_content_str = ""
if diff.new.get_data("links"):
new_file_content_str = self._get_pr_file_content(diff.new.get_data("links")['self']['href'])
else:
new_file_content_str = ""
except Exception as e:
get_logger().exception(f"Error - bitbucket failed to get file content, error: {e}")