diff --git a/aider/coders/base_coder.py b/aider/coders/base_coder.py index e304bcdf2..c0a16499a 100755 --- a/aider/coders/base_coder.py +++ b/aider/coders/base_coder.py @@ -971,8 +971,15 @@ class Coder: if not self.repo: return [] - files = self.repo.git.execute(["git", "-c", "core.quotepath=off", "ls-files"]) - files = set(files.splitlines()) + try: + commit = self.repo.head.commit + except ValueError: + return set() + + files = [] + for blob in commit.tree.traverse(): + if blob.type == "blob": # blob is a file + files.append(blob.path) # convert to appropriate os.sep, since git always normalizes to / res = set(str(Path(PurePosixPath(path))) for path in files) diff --git a/tests/test_coder.py b/tests/test_coder.py index 756840740..403bf0805 100644 --- a/tests/test_coder.py +++ b/tests/test_coder.py @@ -30,9 +30,9 @@ class TestCoder(unittest.TestCase): coder = Coder.create(models.GPT4, None, mock_io, openai_api_key="fake_key") # Mock the git repo - mock_repo = MagicMock() - mock_repo.git.execute.return_value = "file1.txt\nfile2.py" - coder.repo = mock_repo + mock = MagicMock() + mock.return_value = set(["file1.txt", "file2.py"]) + coder.get_tracked_files = mock # Call the check_for_file_mentions method coder.check_for_file_mentions("Please check file1.txt and file2.py") @@ -76,10 +76,9 @@ class TestCoder(unittest.TestCase): # Initialize the Coder object with the mocked IO and mocked repo coder = Coder.create(models.GPT4, None, mock_io, openai_api_key="fake_key") - # Mock the git repo - mock_repo = MagicMock() - mock_repo.git.execute.return_value = "file1.txt\nfile2.py" - coder.repo = mock_repo + mock = MagicMock() + mock.return_value = set(["file1.txt", "file2.py"]) + coder.get_tracked_files = mock # Call the check_for_file_mentions method coder.check_for_file_mentions("Please check file1.txt and file2.py") @@ -103,10 +102,9 @@ class TestCoder(unittest.TestCase): # Initialize the Coder object with the mocked IO and mocked repo coder = Coder.create(models.GPT4, None, mock_io, openai_api_key="fake_key") - # Mock the git repo - mock_repo = MagicMock() - mock_repo.git.execute.return_value = "file1.txt\nother/file1.txt" - coder.repo = mock_repo + mock = MagicMock() + mock.return_value = set(["file1.txt", "other/file1.txt"]) + coder.get_tracked_files = mock # Call the check_for_file_mentions method coder.check_for_file_mentions("Please check file1.txt!") @@ -376,6 +374,8 @@ class TestCoder(unittest.TestCase): file_path.touch() repo.git.add(str(file_path)) + repo.git.commit("-m", "added") + # Create a Coder object on the temporary directory coder = Coder.create( models.GPT4,