From 9becad2eaf073d1ddd8630a4c5370d0ab28f4f7e Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Thu, 10 Jul 2025 17:15:08 +0530 Subject: [PATCH 1/7] fix: clean up PR title formatting before publishing --- pr_agent/tools/pr_description.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 3ce633dd..0a7c5d00 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -169,7 +169,8 @@ class PRDescription: # publish description if get_settings().pr_description.publish_description_as_comment: - full_markdown_description = f"## Title\n\n{pr_title}\n\n___\n{pr_body}" + pr_title_clean = pr_title.strip().replace('\n', ' ') + full_markdown_description = f"## Title\n\n{pr_title_clean}\n\n___\n{pr_body}" if get_settings().pr_description.publish_description_as_comment_persistent: self.git_provider.publish_persistent_comment(full_markdown_description, initial_header="## Title", @@ -179,7 +180,8 @@ class PRDescription: else: self.git_provider.publish_comment(full_markdown_description) else: - self.git_provider.publish_description(pr_title, pr_body) + pr_title_clean = pr_title.strip().replace('\n', ' ') + self.git_provider.publish_description(pr_title_clean, pr_body) # publish final update message if (get_settings().pr_description.final_update_message and not get_settings().config.get('is_auto_command', False)): From 00b581578542ef5f83d085f5751cc4d60e2c4be6 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Thu, 10 Jul 2025 17:19:52 +0530 Subject: [PATCH 2/7] fix: streamline PR title cleaning process for comment publishing --- pr_agent/tools/pr_description.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 0a7c5d00..16e5aec8 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -168,8 +168,8 @@ class PRDescription: get_logger().debug(f"Labels are the same, not updating") # publish description + pr_title_clean = pr_title.strip().replace('\n', ' ') if get_settings().pr_description.publish_description_as_comment: - pr_title_clean = pr_title.strip().replace('\n', ' ') full_markdown_description = f"## Title\n\n{pr_title_clean}\n\n___\n{pr_body}" if get_settings().pr_description.publish_description_as_comment_persistent: self.git_provider.publish_persistent_comment(full_markdown_description, @@ -180,7 +180,6 @@ class PRDescription: else: self.git_provider.publish_comment(full_markdown_description) else: - pr_title_clean = pr_title.strip().replace('\n', ' ') self.git_provider.publish_description(pr_title_clean, pr_body) # publish final update message From 85484899c35c84d6c3e90f561308596b522f4019 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Thu, 10 Jul 2025 17:26:13 +0530 Subject: [PATCH 3/7] fix: implement dedicated method for cleaning PR titles --- pr_agent/tools/pr_description.py | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 16e5aec8..56391c53 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -168,7 +168,7 @@ class PRDescription: get_logger().debug(f"Labels are the same, not updating") # publish description - pr_title_clean = pr_title.strip().replace('\n', ' ') + pr_title_clean = self.clean_title(pr_title) if get_settings().pr_description.publish_description_as_comment: full_markdown_description = f"## Title\n\n{pr_title_clean}\n\n___\n{pr_body}" if get_settings().pr_description.publish_description_as_comment_persistent: @@ -759,6 +759,12 @@ class PRDescription: """ return pr_body + @staticmethod + def clean_title(title: str) -> str: + """Clean the PR title by stripping whitespace and replacing newlines with spaces.""" + return title.strip().replace('\n', ' ') + + def count_chars_without_html(string): if '<' not in string: return len(string) From d9eb0367cfeef89d622eb68c040f8df4a3f37308 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Thu, 10 Jul 2025 18:06:44 +0530 Subject: [PATCH 4/7] fix: enhance PR title cleaning by normalizing whitespace --- pr_agent/tools/pr_description.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index 56391c53..c0ba2b68 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -761,8 +761,8 @@ class PRDescription: @staticmethod def clean_title(title: str) -> str: - """Clean the PR title by stripping whitespace and replacing newlines with spaces.""" - return title.strip().replace('\n', ' ') + """Clean the PR title by normalizing all whitespace to a single space and stripping leading/trailing spaces.""" + return re.sub(r'\s+', ' ', title.strip()) def count_chars_without_html(string): From 447a384aeef9d320e6eb17ce1c596a7fea3cc812 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Thu, 10 Jul 2025 18:17:31 +0530 Subject: [PATCH 5/7] fix: return empty string for None or empty PR title in cleaning method --- pr_agent/tools/pr_description.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index c0ba2b68..c0b7fa24 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -761,7 +761,9 @@ class PRDescription: @staticmethod def clean_title(title: str) -> str: - """Clean the PR title by normalizing all whitespace to a single space and stripping leading/trailing spaces.""" + """Clean the PR title by normalizing all whitespace to a single space and stripping leading/trailing spaces. Returns empty string if input is None or empty.""" + if not title: + return "" return re.sub(r'\s+', ' ', title.strip()) From 1dbfd27d8edef1a4b9c6a66516fda74610ae3e53 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Sat, 12 Jul 2025 23:26:47 +0530 Subject: [PATCH 6/7] fix: use strip instead of regex --- pr_agent/tools/pr_description.py | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index c0b7fa24..d2365e55 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -168,9 +168,8 @@ class PRDescription: get_logger().debug(f"Labels are the same, not updating") # publish description - pr_title_clean = self.clean_title(pr_title) if get_settings().pr_description.publish_description_as_comment: - full_markdown_description = f"## Title\n\n{pr_title_clean}\n\n___\n{pr_body}" + full_markdown_description = f"## Title\n\n{pr_title.strip()}\n\n___\n{pr_body}" if get_settings().pr_description.publish_description_as_comment_persistent: self.git_provider.publish_persistent_comment(full_markdown_description, initial_header="## Title", @@ -180,7 +179,7 @@ class PRDescription: else: self.git_provider.publish_comment(full_markdown_description) else: - self.git_provider.publish_description(pr_title_clean, pr_body) + self.git_provider.publish_description(pr_title.strip(), pr_body) # publish final update message if (get_settings().pr_description.final_update_message and not get_settings().config.get('is_auto_command', False)): @@ -759,12 +758,7 @@ class PRDescription: """ return pr_body - @staticmethod - def clean_title(title: str) -> str: - """Clean the PR title by normalizing all whitespace to a single space and stripping leading/trailing spaces. Returns empty string if input is None or empty.""" - if not title: - return "" - return re.sub(r'\s+', ' ', title.strip()) + def count_chars_without_html(string): From fac2141df37825eb035f1d307f7e58a4a0d22685 Mon Sep 17 00:00:00 2001 From: Abhinav Kumar Date: Sat, 12 Jul 2025 23:28:29 +0530 Subject: [PATCH 7/7] refactor: remove unnecessary blank lines --- pr_agent/tools/pr_description.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index d2365e55..f0446b05 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -758,9 +758,6 @@ class PRDescription: """ return pr_body - - - def count_chars_without_html(string): if '<' not in string: return len(string)