From 87a245bf9c402103e9c25418d66ba889e01bf0bf Mon Sep 17 00:00:00 2001 From: isExample Date: Thu, 26 Jun 2025 15:26:12 +0900 Subject: [PATCH] fix: support root-level matching for '**/' globs - generate an additional regex to match root-level files alongside '**/' patterns. - ensure files in the repo root are correctly excluded from analysis. --- pr_agent/algo/file_filter.py | 12 ++++++++++-- tests/unittest/test_file_filter.py | 3 ++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/pr_agent/algo/file_filter.py b/pr_agent/algo/file_filter.py index 93a7e74c..0a0b3480 100644 --- a/pr_agent/algo/file_filter.py +++ b/pr_agent/algo/file_filter.py @@ -17,14 +17,14 @@ def filter_ignored(files, platform = 'github'): glob_setting = get_settings().ignore.glob if isinstance(glob_setting, str): # --ignore.glob=[.*utils.py], --ignore.glob=.*utils.py glob_setting = glob_setting.strip('[]').split(",") - patterns += [fnmatch.translate(glob) for glob in glob_setting] + patterns += translate_globs_to_regexes(glob_setting) code_generators = get_settings().config.get('ignore_language_framework', []) for cg in code_generators: glob_patterns = get_settings().generated_code.get(cg, []) if isinstance(glob_patterns, str): glob_patterns = [glob_patterns] - patterns += [fnmatch.translate(glob) for glob in glob_patterns] + patterns += translate_globs_to_regexes(glob_patterns) # compile all valid patterns compiled_patterns = [] @@ -73,3 +73,11 @@ def filter_ignored(files, platform = 'github'): print(f"Could not filter file list: {e}") return files + +def translate_globs_to_regexes(globs: list): + regexes = [] + for pattern in globs: + regexes.append(fnmatch.translate(pattern)) + if pattern.startswith("**/"): # cover root-level files + regexes.append(fnmatch.translate(pattern[3:])) + return regexes diff --git a/tests/unittest/test_file_filter.py b/tests/unittest/test_file_filter.py index 064290f3..272a20b4 100644 --- a/tests/unittest/test_file_filter.py +++ b/tests/unittest/test_file_filter.py @@ -92,7 +92,8 @@ class TestIgnoreFilter: type('', (object,), {'filename': 'dir1/service.pb.go'})(), type('', (object,), {'filename': 'dir1/dir/data_pb2.py'})(), type('', (object,), {'filename': 'file.py'})(), - type('', (object,), {'filename': 'dir2/file_gen.go'})() + type('', (object,), {'filename': 'dir2/file_gen.go'})(), + type('', (object,), {'filename': 'file.generated.go'})() ] expected = [ files[0],