diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index 7bf4a0437..7255e91df 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -290,9 +290,10 @@ class Coder: def get_abs_fnames_content(self): for fname in list(self.abs_fnames): content = self.io.read_text(fname) + dump(fname, content) if content is None: relative_fname = self.get_rel_fname(fname) - self.tool_error(f"Dropping {relative_fname} from the chat.") + self.io.tool_error(f"Dropping {relative_fname} from the chat.") self.abs_fnames.remove(fname) else: yield fname, content diff --git a/aider/io.py b/aider/io.py index 67f846bee..98a8a62f3 100644 --- a/aider/io.py +++ b/aider/io.py @@ -141,7 +141,10 @@ class InputOutput: try: with open(str(filename), "r", encoding=self.encoding) as f: return f.read() - except (FileNotFoundError, UnicodeError) as e: + except FileNotFoundError: + self.tool_error(f"{filename}: file not found error") + return + except UnicodeError as e: self.tool_error(f"{filename}: {e}") return diff --git a/tests/test_coder.py b/tests/test_coder.py index 41ba7c768..b9bc9ad23 100644 --- a/tests/test_coder.py +++ b/tests/test_coder.py @@ -1,4 +1,5 @@ import os +import tempfile import unittest from unittest.mock import MagicMock, patch @@ -7,6 +8,8 @@ import requests from aider import models from aider.coders import Coder +from aider.dump import dump # noqa: F401 +from aider.io import InputOutput class TestCoder(unittest.TestCase): @@ -177,6 +180,35 @@ class TestCoder(unittest.TestCase): # Assert that print was called once mock_print.assert_called_once() + def test_run_with_file_deletion(self): + # Create a few temporary files + _, file1 = tempfile.mkstemp() + _, file2 = tempfile.mkstemp() + + files = [file1, file2] + + # Initialize the Coder object with the mocked IO and mocked repo + coder = Coder.create( + models.GPT4, None, io=InputOutput(), openai_api_key="fake_key", fnames=files + ) + + def mock_send(*args, **kwargs): + coder.partial_response_content = "ok" + coder.partial_response_function_call = dict() + + coder.send = MagicMock(side_effect=mock_send) + + # Call the run method with a message + coder.run(with_message="hi") + self.assertEqual(len(coder.abs_fnames), 2) + + # Delete one of the files + os.remove(file1) + + # Call the run method again with a message + coder.run(with_message="hi") + self.assertEqual(len(coder.abs_fnames), 1) + if __name__ == "__main__": unittest.main()