From 8c0370a166b776996bef82503753bd17b8ef2615 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Tue, 1 Aug 2023 15:15:59 +0300 Subject: [PATCH 1/3] Commit messages in pr-description --- pr_agent/git_providers/bitbucket_provider.py | 3 +++ pr_agent/git_providers/github_provider.py | 17 ++++++++++++++++- pr_agent/git_providers/gitlab_provider.py | 3 +++ pr_agent/settings/pr_description_prompts.toml | 6 ++++++ pr_agent/tools/pr_description.py | 4 +++- 5 files changed, 31 insertions(+), 2 deletions(-) diff --git a/pr_agent/git_providers/bitbucket_provider.py b/pr_agent/git_providers/bitbucket_provider.py index 264f40cf..27694f8f 100644 --- a/pr_agent/git_providers/bitbucket_provider.py +++ b/pr_agent/git_providers/bitbucket_provider.py @@ -121,3 +121,6 @@ class BitbucketProvider: def _get_pr_file_content(self, remote_link: str): return "" + + def get_commit_messages(self): + return "" # not implemented yet diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index dac92e89..0e6b85a7 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -343,4 +343,19 @@ class GithubProvider(GitProvider): return [label.name for label in self.pr.labels] except Exception as e: logging.exception(f"Failed to get labels, error: {e}") - return [] \ No newline at end of file + return [] + + def get_commit_messages(self) -> str: + """ + Retrieves the commit messages of a pull request. + + Returns: + str: A string containing the commit messages of the pull request. + """ + try: + commit_list = list(self.pr.get_commits()) + commit_messages = [commit.commit.message for commit in commit_list] + commit_messages_str = "\n".join([f"{i + 1}. {message}" for i, message in enumerate(commit_messages)]) + except: + commit_messages_str = "" + return commit_messages_str diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index b88ba28a..0e2f293a 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -298,3 +298,6 @@ class GitLabProvider(GitProvider): def get_labels(self): return self.mr.labels + + def get_commit_messages(self): + return "" # not implemented yet diff --git a/pr_agent/settings/pr_description_prompts.toml b/pr_agent/settings/pr_description_prompts.toml index 16b6bfde..95a12681 100644 --- a/pr_agent/settings/pr_description_prompts.toml +++ b/pr_agent/settings/pr_description_prompts.toml @@ -36,8 +36,14 @@ Don't repeat the prompt in the answer, and avoid outputting the 'type' and 'desc user="""PR Info: Branch: '{{branch}}' {%- if language %} + Main language: {{language}} {%- endif %} +{%- if commit_messages_str %} + +Commit messages: +{{commit_messages_str}} +{%- endif %} The PR Git Diff: diff --git a/pr_agent/tools/pr_description.py b/pr_agent/tools/pr_description.py index fe78cae8..ea0fb92f 100644 --- a/pr_agent/tools/pr_description.py +++ b/pr_agent/tools/pr_description.py @@ -29,7 +29,8 @@ class PRDescription: self.main_pr_language = get_main_pr_language( self.git_provider.get_languages(), self.git_provider.get_files() ) - + commit_messages_str = self.git_provider.get_commit_messages() + # Initialize the AI handler self.ai_handler = AiHandler() @@ -41,6 +42,7 @@ class PRDescription: "language": self.main_pr_language, "diff": "", # empty diff for initial calculation "extra_instructions": settings.pr_description.extra_instructions, + "commit_messages_str": commit_messages_str, } # Initialize the token handler From dfb73c963a145fa1cc21f63a8c42e355887658b5 Mon Sep 17 00:00:00 2001 From: mrT23 Date: Tue, 1 Aug 2023 15:30:14 +0300 Subject: [PATCH 2/3] get_commit_messages for gitlab --- pr_agent/git_providers/github_provider.py | 2 +- pr_agent/git_providers/gitlab_provider.py | 15 +++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/pr_agent/git_providers/github_provider.py b/pr_agent/git_providers/github_provider.py index 0e6b85a7..341335df 100644 --- a/pr_agent/git_providers/github_provider.py +++ b/pr_agent/git_providers/github_provider.py @@ -353,7 +353,7 @@ class GithubProvider(GitProvider): str: A string containing the commit messages of the pull request. """ try: - commit_list = list(self.pr.get_commits()) + commit_list = self.pr.get_commits() commit_messages = [commit.commit.message for commit in commit_list] commit_messages_str = "\n".join([f"{i + 1}. {message}" for i, message in enumerate(commit_messages)]) except: diff --git a/pr_agent/git_providers/gitlab_provider.py b/pr_agent/git_providers/gitlab_provider.py index 0e2f293a..279815d6 100644 --- a/pr_agent/git_providers/gitlab_provider.py +++ b/pr_agent/git_providers/gitlab_provider.py @@ -299,5 +299,16 @@ class GitLabProvider(GitProvider): def get_labels(self): return self.mr.labels - def get_commit_messages(self): - return "" # not implemented yet + def get_commit_messages(self) -> str: + """ + Retrieves the commit messages of a pull request. + + Returns: + str: A string containing the commit messages of the pull request. + """ + try: + commit_messages_list = [commit['message'] for commit in self.mr.commits()._list] + commit_messages_str = "\n".join([f"{i + 1}. {message}" for i, message in enumerate(commit_messages_list)]) + except: + commit_messages_str = "" + return commit_messages_str From e577d27f9b2919bca48cfa4da2977f520e6b0a62 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Tue, 1 Aug 2023 12:38:31 +0000 Subject: [PATCH 3/3] Update CHANGELOG.md --- CHANGELOG.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3d594a89..6164830b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## 2023-08-01 + +### Enhanced +- Introduced the ability to retrieve commit messages from pull requests across different git providers. +- Implemented commit messages retrieval for GitHub and GitLab providers. +- Updated the PR description template to include a section for commit messages if they exist. + ## 2023-07-30 ### Enhanced