diff --git a/pr_agent/git_providers/git_provider.py b/pr_agent/git_providers/git_provider.py index 97fb0529..2b5e4e71 100644 --- a/pr_agent/git_providers/git_provider.py +++ b/pr_agent/git_providers/git_provider.py @@ -91,17 +91,29 @@ class GitProvider(ABC): # return description[user_description_start_position:].split("\n", 1)[-1].strip() # the 'user description' is in the beginning. extract and return it - original_user_description = description.split("___")[0].strip() - if original_user_description.lower().startswith(user_description_header): - original_user_description = original_user_description[len(user_description_header):].strip() + possible_headers = self._possible_headers() + start_position = description_lowercase.find(user_description_header) + len(user_description_header) + end_position = len(description) + for header in possible_headers: # try to clip at the next header + if header != user_description_header and header in description_lowercase: + end_position = min(end_position, description_lowercase.find(header)) + if end_position != len(description) and end_position > start_position: + original_user_description = description[start_position:end_position].strip() + if original_user_description.endswith("___"): + original_user_description = original_user_description[:-3].strip() + else: + original_user_description = description.split("___")[0].strip() + if original_user_description.lower().startswith(user_description_header): + original_user_description = original_user_description[len(user_description_header):].strip() + return original_user_description - + def _possible_headers(self): + return ("## user description", "## pr type", "## pr description", "## pr labels", "## type", "## description", + "## labels", "### 🤖 generated by pr agent") def _is_generated_by_pr_agent(self, description_lowercase: str) -> bool: - possible_headers = ( - "## user description", "## pr type", "## pr description", "## pr labels", "## type", "## description", - "## labels", "### 🤖 generated by pr agent") + possible_headers = self._possible_headers() return any(description_lowercase.startswith(header) for header in possible_headers) @abstractmethod