diff --git a/aider_gitea/__init__.py b/aider_gitea/__init__.py index 6345df6..ae5ea5d 100644 --- a/aider_gitea/__init__.py +++ b/aider_gitea/__init__.py @@ -282,15 +282,9 @@ def has_commits_on_branch(cwd: Path, base_branch: str, current_branch: str) -> b True if there are commits on the current branch not in the base branch, False otherwise. """ try: - result = subprocess.run( - ['git', 'log', f'{base_branch}..{current_branch}', '--oneline'], - check=True, - cwd=cwd, - capture_output=True, - text=True, - ) - return bool(result.stdout.strip()) - except subprocess.CalledProcessError: + commit_messages = get_commit_messages(cwd, base_branch, current_branch) + return bool(list(commit_messages)) + except Exception: logger.exception('Failed to check commits on branch %s', current_branch) return False diff --git a/test/test_has_commits_on_branch.py b/test/test_has_commits_on_branch.py new file mode 100644 index 0000000..86119c4 --- /dev/null +++ b/test/test_has_commits_on_branch.py @@ -0,0 +1,48 @@ +import subprocess +from pathlib import Path +from unittest.mock import patch, MagicMock + +import pytest + +from aider_gitea import has_commits_on_branch, get_commit_messages + + +class TestHasCommitsOnBranch: + def setup_method(self): + self.cwd = Path('/tmp/test-repo') + self.base_branch = 'main' + self.current_branch = 'feature-branch' + + @patch('aider_gitea.get_commit_messages') + def test_has_commits_true(self, mock_get_commit_messages): + # Setup mock to return some commit messages + mock_get_commit_messages.return_value = ['Commit 1', 'Commit 2'] + + # Test function returns True when there are commits + assert has_commits_on_branch(self.cwd, self.base_branch, self.current_branch) is True + + # Verify get_commit_messages was called with correct arguments + mock_get_commit_messages.assert_called_once_with( + self.cwd, self.base_branch, self.current_branch + ) + + @patch('aider_gitea.get_commit_messages') + def test_has_commits_false(self, mock_get_commit_messages): + # Setup mock to return empty list + mock_get_commit_messages.return_value = [] + + # Test function returns False when there are no commits + assert has_commits_on_branch(self.cwd, self.base_branch, self.current_branch) is False + + # Verify get_commit_messages was called with correct arguments + mock_get_commit_messages.assert_called_once_with( + self.cwd, self.base_branch, self.current_branch + ) + + @patch('aider_gitea.get_commit_messages') + def test_has_commits_exception(self, mock_get_commit_messages): + # Setup mock to raise an exception + mock_get_commit_messages.side_effect = Exception("Git command failed") + + # Test function returns False when an exception occurs + assert has_commits_on_branch(self.cwd, self.base_branch, self.current_branch) is False