/add and /drop should work on untracked files in a repo (without committing them)

This commit is contained in:
Paul Gauthier 2023-11-15 12:37:59 -08:00
parent f6aa09ca85
commit 95fe1be4c5
2 changed files with 27 additions and 36 deletions

View file

@ -283,8 +283,6 @@ class Commands:
"Add files to the chat so GPT can edit them or review them in detail"
added_fnames = []
git_added = []
git_files = self.coder.repo.get_tracked_files() if self.coder.repo else []
all_matched_files = set()
@ -311,7 +309,6 @@ class Commands:
for matched_file in all_matched_files:
abs_file_path = self.coder.abs_root_path(matched_file)
rel_path = self.coder.get_rel_fname(matched_file)
if not abs_file_path.startswith(self.coder.root):
self.io.tool_error(
@ -319,14 +316,6 @@ class Commands:
)
continue
if self.coder.repo and rel_path not in git_files:
try:
self.coder.repo.repo.git.add(abs_file_path)
git_added.append(matched_file)
except git.exc.GitCommandError as e:
self.io.tool_error(f"Unable to add {matched_file}: {str(e)}")
continue
if abs_file_path in self.coder.abs_fnames:
self.io.tool_error(f"{matched_file} is already in the chat")
else:
@ -338,11 +327,6 @@ class Commands:
self.io.tool_output(f"Added {matched_file} to the chat")
added_fnames.append(matched_file)
if self.coder.repo and git_added and self.coder.auto_commits:
git_added = " ".join(git_added)
commit_message = f"aider: Added {git_added}"
self.coder.repo.commit(message=commit_message)
if not added_fnames:
return
@ -372,7 +356,7 @@ class Commands:
matched_files = self.glob_filtered_to_repo(word)
if not matched_files:
self.io.tool_error(f"No files matched '{word}'")
matched_files.append(word)
for matched_file in matched_files:
abs_fname = self.coder.abs_root_path(matched_file)

View file

@ -414,25 +414,6 @@ class TestCommands(TestCase):
self.assertIn(str(fname.resolve()), coder.abs_fnames)
def test_cmd_add_no_autocommit(self):
with GitTemporaryDirectory():
io = InputOutput(pretty=False, yes=True)
from aider.coders import Coder
coder = Coder.create(models.GPT35, None, io, auto_commits=False)
commands = Commands(io, coder)
commands.cmd_add("foo.txt")
# Check if both files have been created in the temporary directory
self.assertTrue(os.path.exists("foo.txt"))
repo = git.Repo()
# Assert that foo.txt has been `git add` but not `git commit`
added_files = repo.git.diff("--cached", "--name-only").split()
self.assertIn("foo.txt", added_files)
def test_cmd_add_existing_with_dirty_repo(self):
with GitTemporaryDirectory():
repo = git.Repo()
@ -485,3 +466,29 @@ class TestCommands(TestCase):
commands.cmd_add("file.txt")
self.assertEqual(coder.abs_fnames, set())
def test_cmd_add_drop_untracked_files(self):
with GitTemporaryDirectory():
repo = git.Repo()
io = InputOutput(pretty=False, yes=False)
from aider.coders import Coder
coder = Coder.create(models.GPT35, None, io)
commands = Commands(io, coder)
fname = Path("test.txt")
fname.touch()
self.assertEqual(len(coder.abs_fnames), 0)
commands.cmd_add(str(fname))
files_in_repo = repo.git.ls_files()
self.assertNotIn(str(fname), files_in_repo)
self.assertEqual(len(coder.abs_fnames), 1)
commands.cmd_drop(str(fname))
self.assertEqual(len(coder.abs_fnames), 0)