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

Tr/err_protections
This commit is contained in:
Tal
2024-08-13 11:58:09 +03:00
committed by GitHub
3 changed files with 40 additions and 12 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:
@ -171,6 +188,9 @@ class BitbucketProvider(GitProvider):
diff_split_lines[4].startswith("+++") and diff_split_lines[4].startswith("+++") and
diff_split_lines[5].startswith("@@"))): diff_split_lines[5].startswith("@@"))):
diff_split[i] = "\n".join(diff_split_lines[4:]) diff_split[i] = "\n".join(diff_split_lines[4:])
else:
if diffs[i].data.get('lines_added', 0) == 0 and diffs[i].data.get('lines_removed', 0) == 0:
diff_split[i] = ""
else: else:
get_logger().error(f"Error - failed to remove the bitbucket header from diff {i}") get_logger().error(f"Error - failed to remove the bitbucket header from diff {i}")
break break
@ -178,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:
@ -200,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':

View File

@ -108,13 +108,18 @@ async def handle_github_webhooks(background_tasks: BackgroundTasks, request: Req
return "OK" return "OK"
except KeyError: except KeyError:
get_logger().error("Failed to get actor type, check previous logs, this shouldn't happen.") get_logger().error("Failed to get actor type, check previous logs, this shouldn't happen.")
# Get the username of the sender
try: try:
owner = data["data"]["repository"]["owner"]["username"] username = data["data"]["actor"]["username"]
except Exception as e: except KeyError:
get_logger().error(f"Failed to get owner, will continue: {e}") try:
owner = "unknown" username = data["data"]["actor"]["display_name"]
except KeyError:
username = data["data"]["actor"]["nickname"]
log_context["sender"] = username
sender_id = data["data"]["actor"]["account_id"] sender_id = data["data"]["actor"]["account_id"]
log_context["sender"] = owner
log_context["sender_id"] = sender_id log_context["sender_id"] = sender_id
jwt_parts = input_jwt.split(".") jwt_parts = input_jwt.split(".")
claim_part = jwt_parts[1] claim_part = jwt_parts[1]