Add file ignore functionality and update documentation for ignore patterns

This commit is contained in:
mrT23
2024-06-13 12:01:50 +03:00
parent e367df352b
commit 2076454798
3 changed files with 36 additions and 7 deletions

View File

@ -28,8 +28,13 @@ def filter_ignored(files):
pass
# keep filenames that _don't_ match the ignore regex
for r in compiled_patterns:
files = [f for f in files if (f.filename and not r.match(f.filename))]
if 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 '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']))]
except Exception as e:
print(f"Could not filter file list: {e}")

View File

@ -146,10 +146,20 @@ class GithubProvider(GitProvider):
if self.diff_files:
return self.diff_files
files = self.get_files()
files = filter_ignored(files)
diff_files = []
# filter using [ignore] patterns
files_original = self.get_files()
files = filter_ignored(files_original)
if files_original != files:
try:
names_original = [file.filename for file in files_original]
names_new = [file.filename for file in files]
get_logger().info(f"Filtered out [ignore] files for pull request:", extra=
{"files": names_original,
"filtered_files": names_new})
except Exception:
pass
diff_files = []
for file in files:
if not is_valid_file(file.filename):
get_logger().info(f"Skipping a non-code file: {file.filename}")

View File

@ -6,6 +6,7 @@ from urllib.parse import urlparse
import gitlab
from gitlab import GitlabGetError
from ..algo.file_filter import filter_ignored
from ..algo.language_handler import is_valid_file
from ..algo.utils import load_large_diff, clip_tokens, find_line_number_of_relevant_line_in_file
from ..config_loader import get_settings
@ -84,7 +85,20 @@ class GitLabProvider(GitProvider):
if self.diff_files:
return self.diff_files
diffs = self.mr.changes()['changes']
# filter using [ignore] patterns
diffs_original = self.mr.changes()['changes']
diffs = filter_ignored(diffs_original)
if diffs != diffs_original:
try:
names_original = [diff['new_path'] for diff in diffs_original]
names_filtered = [diff['new_path'] for diff in diffs]
get_logger().info(f"Filtered out [ignore] files for merge request {self.id_mr}",extra={
'original_files': names_original,
'filtered_files': names_filtered
})
except Exception as e:
get_logger().exception(f"Could not log filtered files for merge request {self.id_mr}: {e}")
diff_files = []
for diff in diffs:
if is_valid_file(diff['new_path']):
@ -130,7 +144,7 @@ class GitLabProvider(GitProvider):
self.diff_files = diff_files
return diff_files
def get_files(self):
def get_files(self) -> list:
if not self.git_files:
self.git_files = [change['new_path'] for change in self.mr.changes()['changes']]
return self.git_files