From 58bc54b1934b8788d62202dfbb7372aef76effb8 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Thu, 13 Jun 2024 12:27:10 +0300 Subject: [PATCH] Add file ignore functionality and update documentation for ignore patterns --- pr_agent/algo/file_filter.py | 3 +++ pr_agent/algo/language_handler.py | 2 +- pr_agent/git_providers/azuredevops_provider.py | 15 +++++++++++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/pr_agent/algo/file_filter.py b/pr_agent/algo/file_filter.py index 75d75c1d..9b705cd7 100644 --- a/pr_agent/algo/file_filter.py +++ b/pr_agent/algo/file_filter.py @@ -38,6 +38,9 @@ def filter_ignored(files): 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']))] + elif isinstance(files[0], str): # azure devops + for r in compiled_patterns: + files = [f for f in files if not r.match(f)] except Exception as e: print(f"Could not filter file list: {e}") diff --git a/pr_agent/algo/language_handler.py b/pr_agent/algo/language_handler.py index b4c02bee..83f7b85e 100644 --- a/pr_agent/algo/language_handler.py +++ b/pr_agent/algo/language_handler.py @@ -15,7 +15,7 @@ def filter_bad_extensions(files): return [f for f in files if f.filename is not None and is_valid_file(f.filename)] -def is_valid_file(filename): +def is_valid_file(filename: str): return filename.split('.')[-1] not in bad_extensions diff --git a/pr_agent/git_providers/azuredevops_provider.py b/pr_agent/git_providers/azuredevops_provider.py index ee3a116f..d27a5040 100644 --- a/pr_agent/git_providers/azuredevops_provider.py +++ b/pr_agent/git_providers/azuredevops_provider.py @@ -2,6 +2,7 @@ import os from typing import Optional, Tuple from urllib.parse import urlparse +from ..algo.file_filter import filter_ignored from ..log import get_logger from ..algo.language_handler import is_valid_file from ..algo.utils import clip_tokens, find_line_number_of_relevant_line_in_file, load_large_diff @@ -284,8 +285,20 @@ class AzureDevopsProvider(GitProvider): # # diffs = list(set(diffs)) + diffs_original = diffs + diffs = filter_ignored(diffs_original) + if diffs_original != diffs: + try: + get_logger().info(f"Filtered out [ignore] files for pull request:", extra= + {"files": diffs_original, # diffs is just a list of names + "filtered_files": diffs}) + except Exception: + pass + + invalid_files_names = [] for file in diffs: if not is_valid_file(file): + invalid_files_names.append(file) continue version = GitVersionDescriptor( @@ -350,6 +363,8 @@ class AzureDevopsProvider(GitProvider): edit_type=edit_type, ) ) + get_logger().info(f"Invalid files: {invalid_files_names}") + self.diff_files = diff_files return diff_files except Exception as e: