Add error handling for missing file paths in Bitbucket provider and improve file validation logic

This commit is contained in:
mrT23
2024-08-13 11:28:21 +03:00
parent 5252e1826d
commit 1aa6dd9b5d
2 changed files with 25 additions and 5 deletions

View File

@ -14,7 +14,9 @@ def filter_bad_extensions(files):
return [f for f in files if f.filename is not None and is_valid_file(f.filename, bad_extensions)] return [f for f in files if f.filename is not None and is_valid_file(f.filename, bad_extensions)]
def is_valid_file(filename, bad_extensions=None): def is_valid_file(filename:str, bad_extensions=None) -> bool:
if not filename:
return False
if not bad_extensions: if not bad_extensions:
bad_extensions = get_settings().bad_extensions.default bad_extensions = get_settings().bad_extensions.default
if get_settings().config.use_extra_bad_extensions: if get_settings().config.use_extra_bad_extensions:

View File

@ -15,6 +15,12 @@ from ..log import get_logger
from .git_provider import GitProvider from .git_provider import GitProvider
def _gef_filename(diff):
if diff.new.path:
return diff.new.path
return diff.old.path
class BitbucketProvider(GitProvider): class BitbucketProvider(GitProvider):
def __init__( def __init__(
self, pr_url: Optional[str] = None, incremental: Optional[bool] = False self, pr_url: Optional[str] = None, incremental: Optional[bool] = False
@ -123,7 +129,18 @@ class BitbucketProvider(GitProvider):
self.pr = self._get_pr() self.pr = self._get_pr()
def get_files(self): def get_files(self):
return [diff.new.path for diff in self.pr.diffstat()] try:
git_files = context.get("git_files", None)
if git_files:
return git_files
self.git_files = [_gef_filename(diff) for diff in self.pr.diffstat()]
context["git_files"] = self.git_files
return self.git_files
except Exception:
if not self.git_files:
self.git_files = [_gef_filename(diff) for diff in self.pr.diffstat()]
return self.git_files
def get_diff_files(self) -> list[FilePatchInfo]: def get_diff_files(self) -> list[FilePatchInfo]:
if self.diff_files: if self.diff_files:
@ -181,8 +198,9 @@ class BitbucketProvider(GitProvider):
invalid_files_names = [] invalid_files_names = []
diff_files = [] diff_files = []
for index, diff in enumerate(diffs): for index, diff in enumerate(diffs):
if not is_valid_file(diff.new.path): file_path = _gef_filename(diff)
invalid_files_names.append(diff.new.path) if not is_valid_file(file_path):
invalid_files_names.append(file_path)
continue continue
try: try:
@ -203,7 +221,7 @@ class BitbucketProvider(GitProvider):
original_file_content_str, original_file_content_str,
new_file_content_str, new_file_content_str,
diff_split[index], diff_split[index],
diff.new.path, file_path,
) )
if diff.data['status'] == 'added': if diff.data['status'] == 'added':