diff --git a/aider/commands.py b/aider/commands.py index f6e84a3c4..46c671d71 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -187,13 +187,9 @@ class Commands: return last_commit = self.coder.repo.repo.head.commit - dump(last_commit) changed_files_last_commit = {item.a_path for item in last_commit.diff(last_commit.parents[0])} dirty_files = [item.a_path for item in self.coder.repo.repo.index.diff(None)] dirty_files_in_last_commit = changed_files_last_commit.intersection(dirty_files) - dump(changed_files_last_commit) - dump(dirty_files) - dump(dirty_files_in_last_commit) if dirty_files_in_last_commit: self.io.tool_error( diff --git a/tests/test_commands.py b/tests/test_commands.py index 74e5d282f..2a338856f 100644 --- a/tests/test_commands.py +++ b/tests/test_commands.py @@ -492,6 +492,7 @@ class TestCommands(TestCase): commands.cmd_drop(str(fname)) self.assertEqual(len(coder.abs_fnames), 0) + def test_cmd_undo_with_dirty_files_not_in_last_commit(self): with GitTemporaryDirectory() as repo_dir: repo = git.Repo(repo_dir) @@ -499,34 +500,36 @@ class TestCommands(TestCase): coder = Coder.create(models.GPT35, None, io) commands = Commands(io, coder) + other_path = Path(repo_dir) / "other_file.txt" + other_path.write_text("other content") + repo.git.add(str(other_path)) + # Create and commit a file filename = "test_file.txt" file_path = Path(repo_dir) / filename - file_path.write_text("Initial content") + file_path.write_text("first content") repo.git.add(filename) - repo.git.commit("-m", "Initial commit") + repo.git.commit("-m", "aider: first commit") - # Modify the file and commit again - file_path.write_text("Modified content") + file_path.write_text("second content") repo.git.add(filename) - repo.git.commit("-m", "aider: Modify test_file.txt") + repo.git.commit("-m", "aider: second commit") # Store the commit hash last_commit_hash = repo.head.commit.hexsha[:7] coder.last_aider_commit_hash = last_commit_hash - # Create a dirty file that was not in the last commit - other_file = "other_file.txt" - other_file_path = Path(repo_dir) / other_file - other_file_path.write_text("This is an untracked file") + file_path.write_text("dirty content") # Attempt to undo the last commit - output = commands.cmd_undo("") - self.assertIsNone(output, "Undo should not produce any output") + commands.cmd_undo("") # Check that the last commit is still present self.assertEqual(last_commit_hash, repo.head.commit.hexsha[:7]) - # Check that the dirty file is still untracked - self.assertTrue(other_file_path.exists()) - self.assertIn(other_file, repo.untracked_files) + # Put back the initial content (so it's not dirty now) + file_path.write_text("second content") + other_path.write_text("dirty content") + + commands.cmd_undo("") + self.assertNotEqual(last_commit_hash, repo.head.commit.hexsha[:7])