Ruff
Some checks failed
Run Python tests (through Pytest) / Test (push) Failing after 24s
Verify Python project can be installed, loaded and have version checked / Test (push) Successful in 25s

This commit is contained in:
Jon Michael Aanes 2025-04-15 00:31:22 +02:00
parent 34c89c0e5f
commit ab4aef11e6
4 changed files with 70 additions and 48 deletions

View File

@ -242,10 +242,10 @@ def push_changes(
def get_current_commit_hash(cwd: Path) -> str:
"""Get the hash of the current commit.
Args:
cwd: The current working directory (repository path).
Returns:
The hash of the current commit as a string.
"""
@ -262,13 +262,14 @@ def get_current_commit_hash(cwd: Path) -> str:
logger.exception('Failed to get current commit hash')
return ''
def has_changes_since_commit(cwd: Path, commit_hash: str) -> bool:
"""Check if there are any changes since the specified commit.
Args:
cwd: The current working directory (repository path).
commit_hash: The hash of the commit to compare against.
Returns:
True if there are changes since the commit, False otherwise.
"""
@ -285,6 +286,7 @@ def has_changes_since_commit(cwd: Path, commit_hash: str) -> bool:
logger.exception('Failed to check for changes since commit %s', commit_hash)
return False
def has_commits_on_branch(cwd: Path, base_branch: str, current_branch: str) -> bool:
"""Check if there are any commits on the current branch that aren't in the base branch.
@ -344,12 +346,12 @@ def solve_issue_in_repository(
run_cmd(['bash', '-c', AIDER_TEST], tmpdirname)
run_cmd(['git', 'checkout', args.base_branch], tmpdirname)
run_cmd(['git', 'checkout', '-b', branch_name], tmpdirname)
# Run initial ruff pass and commit
run_cmd(['bash', '-c', RUFF_FORMAT_AND_AUTO_FIX], tmpdirname, check=False)
run_cmd(['git', 'add', '.'], tmpdirname)
run_cmd(['git', 'commit', '-m', 'Initial ruff pass'], tmpdirname, check=False)
# Get the commit hash after ruff but before aider
pre_aider_commit = get_current_commit_hash(tmpdirname)
@ -368,10 +370,13 @@ def solve_issue_in_repository(
run_cmd(['bash', '-c', RUFF_FORMAT_AND_AUTO_FIX], tmpdirname, check=False)
run_cmd(['git', 'add', '.'], tmpdirname)
run_cmd(['git', 'commit', '-m', 'Ruff'], tmpdirname, check=False)
# Check if aider made any changes beyond the initial ruff pass
if not has_changes_since_commit(tmpdirname, pre_aider_commit):
logger.info('Aider did not make any changes beyond the initial ruff pass for issue #%s', issue_number)
logger.info(
'Aider did not make any changes beyond the initial ruff pass for issue #%s',
issue_number,
)
return False
# Push changes

View File

@ -171,7 +171,11 @@ class GiteaClient:
return pull_request
def add_labels_to_pull_request(
self, owner: str, repo: str, pull_number: int, labels: list[str],
self,
owner: str,
repo: str,
pull_number: int,
labels: list[str],
) -> bool:
"""Add labels to an existing pull request.

View File

@ -66,7 +66,10 @@ class TestGiteaClientPRLabels:
# Call the method
result = self.client.add_labels_to_pull_request(
owner='owner', repo='repo', pull_number=123, labels=['aider', 'bug'],
owner='owner',
repo='repo',
pull_number=123,
labels=['aider', 'bug'],
)
# Verify the call

View File

@ -1,82 +1,92 @@
import os
import tempfile
from pathlib import Path
from unittest.mock import patch, MagicMock
from unittest.mock import MagicMock, patch
import pytest
def test_init():
import aider_gitea # noqa: F401
import aider_gitea.secrets # noqa: F401
def test_get_current_commit_hash():
from aider_gitea import get_current_commit_hash
with tempfile.TemporaryDirectory() as tmpdirname:
with patch('subprocess.run') as mock_run:
mock_result = MagicMock()
mock_result.stdout = "abcdef1234567890"
mock_result.stdout = 'abcdef1234567890'
mock_run.return_value = mock_result
result = get_current_commit_hash(Path(tmpdirname))
assert result == "abcdef1234567890"
assert result == 'abcdef1234567890'
mock_run.assert_called_once()
def test_has_changes_since_commit():
from aider_gitea import has_changes_since_commit
with tempfile.TemporaryDirectory() as tmpdirname:
# Test with changes
with patch('subprocess.run') as mock_run:
mock_result = MagicMock()
mock_result.stdout = "file1.py\nfile2.py"
mock_result.stdout = 'file1.py\nfile2.py'
mock_run.return_value = mock_result
result = has_changes_since_commit(Path(tmpdirname), "abcdef")
result = has_changes_since_commit(Path(tmpdirname), 'abcdef')
assert result is True
mock_run.assert_called_once()
# Test without changes
with patch('subprocess.run') as mock_run:
mock_result = MagicMock()
mock_result.stdout = ""
mock_result.stdout = ''
mock_run.return_value = mock_result
result = has_changes_since_commit(Path(tmpdirname), "abcdef")
result = has_changes_since_commit(Path(tmpdirname), 'abcdef')
assert result is False
mock_run.assert_called_once()
def test_solve_issue_with_no_aider_changes():
from aider_gitea import solve_issue_in_repository
with tempfile.TemporaryDirectory() as tmpdirname:
args = MagicMock()
args.gitea_url = "https://gitea.example.com"
args.owner = "test-owner"
args.repo = "test-repo"
args.base_branch = "main"
with patch('aider_gitea.run_cmd', return_value=True) as mock_run_cmd, \
patch('aider_gitea.get_current_commit_hash', return_value="abcdef") as mock_get_hash, \
patch('aider_gitea.has_changes_since_commit', return_value=False) as mock_has_changes, \
patch('aider_gitea.create_aider_command', return_value=["mock_aider_command"]) as mock_create_aider:
args.gitea_url = 'https://gitea.example.com'
args.owner = 'test-owner'
args.repo = 'test-repo'
args.base_branch = 'main'
with (
patch('aider_gitea.run_cmd', return_value=True) as mock_run_cmd,
patch(
'aider_gitea.get_current_commit_hash', return_value='abcdef',
) as mock_get_hash,
patch(
'aider_gitea.has_changes_since_commit', return_value=False,
) as mock_has_changes,
patch(
'aider_gitea.create_aider_command', return_value=['mock_aider_command'],
) as mock_create_aider,
):
result = solve_issue_in_repository(
args,
Path(tmpdirname),
"issue-123-test",
"Test Issue",
"Test Description",
"123",
None
'issue-123-test',
'Test Issue',
'Test Description',
'123',
None,
)
assert result is False
mock_get_hash.assert_called_once()
mock_has_changes.assert_called_once_with(Path(tmpdirname), "abcdef")
mock_has_changes.assert_called_once_with(Path(tmpdirname), 'abcdef')
# Verify that the initial ruff pass was run
assert any(call_args[0][0] == ['bash', '-c', RUFF_FORMAT_AND_AUTO_FIX]
for call_args in mock_run_cmd.call_args_list)
assert any(
call_args[0][0] == ['bash', '-c', RUFF_FORMAT_AND_AUTO_FIX]
for call_args in mock_run_cmd.call_args_list
)