Add file ignore functionality and update documentation for ignore patterns

This commit is contained in:
mrT23
2024-06-13 12:09:52 +03:00
parent 2076454798
commit 20f6af803c
3 changed files with 49 additions and 41 deletions

View File

@ -28,11 +28,11 @@ def filter_ignored(files):
pass pass
# keep filenames that _don't_ match the ignore regex # keep filenames that _don't_ match the ignore regex
if files: if files and isinstance(files, list):
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 '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']))]

View File

@ -146,7 +146,7 @@ class GithubProvider(GitProvider):
if self.diff_files: if self.diff_files:
return self.diff_files return self.diff_files
# filter using [ignore] patterns # filter files using [ignore] patterns
files_original = self.get_files() files_original = self.get_files()
files = filter_ignored(files_original) files = filter_ignored(files_original)
if files_original != files: if files_original != files:
@ -160,9 +160,10 @@ class GithubProvider(GitProvider):
pass pass
diff_files = [] diff_files = []
invalid_files_names = []
for file in files: for file in files:
if not is_valid_file(file.filename): if not is_valid_file(file.filename):
get_logger().info(f"Skipping a non-code file: {file.filename}") invalid_files_names.append(file.filename)
continue continue
new_file_content_str = self._get_pr_file_content(file, self.pr.head.sha) # communication with GitHub new_file_content_str = self._get_pr_file_content(file, self.pr.head.sha) # communication with GitHub
@ -198,6 +199,8 @@ class GithubProvider(GitProvider):
num_plus_lines=num_plus_lines, num_plus_lines=num_plus_lines,
num_minus_lines=num_minus_lines,) num_minus_lines=num_minus_lines,)
diff_files.append(file_patch_canonical_structure) diff_files.append(file_patch_canonical_structure)
if invalid_files_names:
get_logger().info(f"Filtered out files with invalid extensions: {invalid_files_names}")
self.diff_files = diff_files self.diff_files = diff_files
try: try:

View File

@ -85,7 +85,7 @@ class GitLabProvider(GitProvider):
if self.diff_files: if self.diff_files:
return self.diff_files return self.diff_files
# filter using [ignore] patterns # filter files using [ignore] patterns
diffs_original = self.mr.changes()['changes'] diffs_original = self.mr.changes()['changes']
diffs = filter_ignored(diffs_original) diffs = filter_ignored(diffs_original)
if diffs != diffs_original: if diffs != diffs_original:
@ -97,14 +97,17 @@ class GitLabProvider(GitProvider):
'filtered_files': names_filtered 'filtered_files': names_filtered
}) })
except Exception as e: except Exception as e:
get_logger().exception(f"Could not log filtered files for merge request {self.id_mr}: {e}") pass
diff_files = [] diff_files = []
invalid_files_names = []
for diff in diffs: for diff in diffs:
if is_valid_file(diff['new_path']): 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_path'], self.mr.diff_refs['base_sha']) original_file_content_str = self.get_pr_file_content(diff['old_path'], self.mr.diff_refs['base_sha'])
new_file_content_str = self.get_pr_file_content(diff['new_path'], self.mr.diff_refs['head_sha']) new_file_content_str = self.get_pr_file_content(diff['new_path'], self.mr.diff_refs['head_sha'])
try: try:
if isinstance(original_file_content_str, bytes): if isinstance(original_file_content_str, bytes):
original_file_content_str = bytes.decode(original_file_content_str, 'utf-8') original_file_content_str = bytes.decode(original_file_content_str, 'utf-8')
@ -140,6 +143,8 @@ class GitLabProvider(GitProvider):
old_filename=None if diff['old_path'] == diff['new_path'] else diff['old_path'], old_filename=None if diff['old_path'] == diff['new_path'] else diff['old_path'],
num_plus_lines=num_plus_lines, num_plus_lines=num_plus_lines,
num_minus_lines=num_minus_lines, )) num_minus_lines=num_minus_lines, ))
if invalid_files_names:
get_logger().info(f"Filtered out files with invalid extensions: {invalid_files_names}")
self.diff_files = diff_files self.diff_files = diff_files
return diff_files return diff_files