Merge pull request #1133 from Codium-ai/tr/err_protections

Add error handling for empty diff files in utils.py and optimize file…
This commit is contained in:
Tal
2024-08-13 22:36:00 +03:00
committed by GitHub
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( re_hunk_header = re.compile(
r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[ ]?(.*)") r"^@@ -(\d+)(?:,(\d+))? \+(\d+)(?:,(\d+))? @@[ ]?(.*)")
if not diff_files:
return position, absolute_position
for file in diff_files: for file in diff_files:
if file.filename and (file.filename.strip() == relevant_file): if file.filename and (file.filename.strip() == relevant_file):
patch = file.patch 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 ..algo.utils import 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
from .git_provider import GitProvider from .git_provider import GitProvider, MAX_FILES_ALLOWED_FULL
def _gef_filename(diff): def _gef_filename(diff):
@ -198,6 +198,7 @@ class BitbucketProvider(GitProvider):
invalid_files_names = [] invalid_files_names = []
diff_files = [] diff_files = []
counter_valid = 0
for index, diff in enumerate(diffs): for index, diff in enumerate(diffs):
file_path = _gef_filename(diff) file_path = _gef_filename(diff)
if not is_valid_file(file_path): if not is_valid_file(file_path):
@ -205,14 +206,23 @@ class BitbucketProvider(GitProvider):
continue continue
try: try:
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"): if diff.old.get_data("links"):
original_file_content_str = self._get_pr_file_content(diff.old.get_data("links")['self']['href']) original_file_content_str = self._get_pr_file_content(
diff.old.get_data("links")['self']['href'])
else: else:
original_file_content_str = "" original_file_content_str = ""
if diff.new.get_data("links"): if diff.new.get_data("links"):
new_file_content_str = self._get_pr_file_content(diff.new.get_data("links")['self']['href']) new_file_content_str = self._get_pr_file_content(diff.new.get_data("links")['self']['href'])
else: else:
new_file_content_str = "" 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 = ""
new_file_content_str = ""
except Exception as e: except Exception as e:
get_logger().exception(f"Error - bitbucket failed to get file content, error: {e}") get_logger().exception(f"Error - bitbucket failed to get file content, error: {e}")
original_file_content_str = "" original_file_content_str = ""