diff --git a/pr_agent/algo/file_filter.py b/pr_agent/algo/file_filter.py index 05c769d7..75d75c1d 100644 --- a/pr_agent/algo/file_filter.py +++ b/pr_agent/algo/file_filter.py @@ -32,6 +32,9 @@ def filter_ignored(files): if hasattr(files[0], 'filename'): # github for r in compiled_patterns: files = [f for f in files if (f.filename and not r.match(f.filename))] + elif hasattr(files[0], 'new') and hasattr(files[0].new, 'path'): # bitbucket + for r in compiled_patterns: + files = [f for f in files if (f.new.path and not r.match(f.new.path))] elif isinstance(files[0], dict) and 'new_path' in files[0]: # gitlab for r in compiled_patterns: files = [f for f in files if (f['new_path'] and not r.match(f['new_path']))] diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 27a88a76..2879d8fb 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -7,6 +7,8 @@ from atlassian.bitbucket import Cloud from starlette_context import context from pr_agent.algo.types import FilePatchInfo, EDIT_TYPE +from ..algo.file_filter import filter_ignored +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 @@ -122,13 +124,30 @@ class BitbucketProvider(GitProvider): if self.diff_files: return self.diff_files - diffs = self.pr.diffstat() + diffs_original = list(self.pr.diffstat()) + diffs = filter_ignored(diffs_original) + if diffs != diffs_original: + try: + names_original = [d.new.path for d in diffs_original] + names_filtered = [d.new.path for d in diffs] + get_logger().info(f"Filtered out [ignore] files for PR", extra={ + 'original_files': names_original, + 'filtered_files': names_filtered + }) + except Exception as e: + pass + diff_split = [ "diff --git%s" % x for x in self.pr.diff().split("diff --git") if x.strip() ] + invalid_files_names = [] diff_files = [] for index, diff in enumerate(diffs): + if not is_valid_file(diff.new.path): + invalid_files_names.append(diff.new.path) + continue + original_file_content_str = self._get_pr_file_content( diff.old.get_data("links") ) @@ -150,6 +169,9 @@ class BitbucketProvider(GitProvider): file_patch_canonic_structure.edit_type = EDIT_TYPE.RENAMED diff_files.append(file_patch_canonic_structure) + if invalid_files_names: + get_logger().info(f"Invalid file names: {invalid_files_names}") + self.diff_files = diff_files return diff_files