mirror of
https://github.com/qodo-ai/pr-agent.git
synced 2025-07-04 12:50:38 +08:00
Add file ignore functionality and update documentation for ignore patterns
This commit is contained in:
@ -32,6 +32,9 @@ def filter_ignored(files):
|
|||||||
if hasattr(files[0], 'filename'): # github
|
if hasattr(files[0], 'filename'): # github
|
||||||
for r in compiled_patterns:
|
for r in compiled_patterns:
|
||||||
files = [f for f in files if (f.filename and not r.match(f.filename))]
|
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
|
elif isinstance(files[0], dict) and 'new_path' in files[0]: # gitlab
|
||||||
for r in compiled_patterns:
|
for r in compiled_patterns:
|
||||||
files = [f for f in files if (f['new_path'] and not r.match(f['new_path']))]
|
files = [f for f in files if (f['new_path'] and not r.match(f['new_path']))]
|
||||||
|
@ -7,6 +7,8 @@ from atlassian.bitbucket import Cloud
|
|||||||
from starlette_context import context
|
from starlette_context import context
|
||||||
|
|
||||||
from pr_agent.algo.types import FilePatchInfo, EDIT_TYPE
|
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 ..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
|
||||||
@ -122,13 +124,30 @@ class BitbucketProvider(GitProvider):
|
|||||||
if self.diff_files:
|
if self.diff_files:
|
||||||
return 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_split = [
|
||||||
"diff --git%s" % x for x in self.pr.diff().split("diff --git") if x.strip()
|
"diff --git%s" % x for x in self.pr.diff().split("diff --git") if x.strip()
|
||||||
]
|
]
|
||||||
|
|
||||||
|
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):
|
||||||
|
invalid_files_names.append(diff.new.path)
|
||||||
|
continue
|
||||||
|
|
||||||
original_file_content_str = self._get_pr_file_content(
|
original_file_content_str = self._get_pr_file_content(
|
||||||
diff.old.get_data("links")
|
diff.old.get_data("links")
|
||||||
)
|
)
|
||||||
@ -150,6 +169,9 @@ class BitbucketProvider(GitProvider):
|
|||||||
file_patch_canonic_structure.edit_type = EDIT_TYPE.RENAMED
|
file_patch_canonic_structure.edit_type = EDIT_TYPE.RENAMED
|
||||||
diff_files.append(file_patch_canonic_structure)
|
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
|
self.diff_files = diff_files
|
||||||
return diff_files
|
return diff_files
|
||||||
|
Reference in New Issue
Block a user