From 4a38861d062c51aab15b0bd0f93f4cea412b4630 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Tue, 13 Aug 2024 08:59:27 +0300 Subject: [PATCH 1/2] Add error handling for missing file paths in file_filter.py for Bitbucket and GitLab platforms --- pr_agent/algo/file_filter.py | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/pr_agent/algo/file_filter.py b/pr_agent/algo/file_filter.py index fa97b283..5c575eef 100644 --- a/pr_agent/algo/file_filter.py +++ b/pr_agent/algo/file_filter.py @@ -33,9 +33,29 @@ def filter_ignored(files, platform = 'github'): if platform == 'github': files = [f for f in files if (f.filename and not r.match(f.filename))] elif platform == 'bitbucket': - 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))] + files_o = [] + for f in files: + if hasattr(f, 'new'): + if f.new and f.new.path and not r.match(f.new.path): + files_o.append(f) + continue + if hasattr(f, 'old'): + if f.old and f.old.path and not r.match(f.old.path): + files_o.append(f) + continue + files = files_o elif platform == 'gitlab': - 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']))] + files_o = [] + for f in files: + if 'new_path' in f and f['new_path'] and not r.match(f['new_path']): + files_o.append(f) + continue + if 'old_path' in f and f['old_path'] and not r.match(f['old_path']): + files_o.append(f) + continue + files = files_o elif platform == 'azure': files = [f for f in files if not r.match(f)] From 396d11aa45a3abb50ba01deb71fa71903d8a282c Mon Sep 17 00:00:00 2001 From: mrT23 Date: Tue, 13 Aug 2024 08:59:45 +0300 Subject: [PATCH 2/2] Improve logging and diff filtering in Bitbucket provider - Enhance logging to include both kept and filtered file names - Add conditional check to filter diff elements based on original and current diffs --- pr_agent/git_providers/bitbucket_provider.py | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index ecc42cfb..35d9f2d7 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -134,10 +134,13 @@ class BitbucketProvider(GitProvider): if diffs != diffs_original: try: names_original = [d.new.path for d in diffs_original] - names_filtered = [d.new.path for d in diffs] + names_kept = [d.new.path for d in diffs] + names_filtered = list(set(names_original) - set(names_kept)) get_logger().info(f"Filtered out [ignore] files for PR", extra={ 'original_files': names_original, - 'filtered_files': names_filtered + 'names_kept': names_kept, + 'names_filtered': names_filtered + }) except Exception as e: pass @@ -145,6 +148,9 @@ class BitbucketProvider(GitProvider): # get the pr patches pr_patch = self.pr.diff() diff_split = ["diff --git" + x for x in pr_patch.split("diff --git") if x.strip()] + # filter all elements of 'diff_split' that are of indices in 'diffs_original' that are not in 'diffs' + if len(diff_split) > len(diffs) and len(diffs_original) == len(diff_split): + diff_split = [diff_split[i] for i in range(len(diff_split)) if diffs_original[i] in diffs] if len(diff_split) != len(diffs): get_logger().error(f"Error - failed to split the diff into {len(diffs)} parts") return []