mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-20 20:35:00 +00:00
Handle diff of file not yet part of repo
This commit is contained in:
parent
9933ad85b0
commit
ae8d04a95f
4 changed files with 58 additions and 4 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
### main branch
|
### main branch
|
||||||
|
|
||||||
- [Only git commit dirty files that GPT tries to edit](https://aider.chat/docs/faq.html#how-does-aider-use-git)
|
- [Only git commit dirty files that GPT tries to edit](https://github.com/paul-gauthier/aider/issues/200#issuecomment-1682750798)
|
||||||
- Send chat history as prompt/context for Whisper voice transcription
|
- Send chat history as prompt/context for Whisper voice transcription
|
||||||
- Added `--voice-language` switch to constrain `/voice` to transcribe to a specific language
|
- Added `--voice-language` switch to constrain `/voice` to transcribe to a specific language
|
||||||
|
|
||||||
|
|
|
@ -721,7 +721,6 @@ class Coder:
|
||||||
|
|
||||||
self.io.tool_output(f"Committing {path} before applying edits.")
|
self.io.tool_output(f"Committing {path} before applying edits.")
|
||||||
self.need_commit_before_edits.add(path)
|
self.need_commit_before_edits.add(path)
|
||||||
return
|
|
||||||
|
|
||||||
def allowed_to_edit(self, path):
|
def allowed_to_edit(self, path):
|
||||||
full_path = self.abs_root_path(path)
|
full_path = self.abs_root_path(path)
|
||||||
|
@ -763,6 +762,7 @@ class Coder:
|
||||||
|
|
||||||
self.abs_fnames.add(full_path)
|
self.abs_fnames.add(full_path)
|
||||||
self.check_for_dirty_commit(path)
|
self.check_for_dirty_commit(path)
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
apply_update_errors = 0
|
apply_update_errors = 0
|
||||||
|
@ -891,6 +891,7 @@ class Coder:
|
||||||
return
|
return
|
||||||
if not self.repo:
|
if not self.repo:
|
||||||
return
|
return
|
||||||
|
|
||||||
self.repo.commit(fnames=self.need_commit_before_edits)
|
self.repo.commit(fnames=self.need_commit_before_edits)
|
||||||
|
|
||||||
# files changed, move cur messages back behind the files messages
|
# files changed, move cur messages back behind the files messages
|
||||||
|
|
|
@ -135,14 +135,20 @@ class GitRepo:
|
||||||
if not fnames:
|
if not fnames:
|
||||||
fnames = []
|
fnames = []
|
||||||
|
|
||||||
|
diffs = ""
|
||||||
|
for fname in fnames:
|
||||||
|
if not self.path_in_repo(fname):
|
||||||
|
diffs += f"Added {fname}\n"
|
||||||
|
|
||||||
if current_branch_has_commits:
|
if current_branch_has_commits:
|
||||||
args = ["HEAD", "--"] + list(fnames)
|
args = ["HEAD", "--"] + list(fnames)
|
||||||
return self.repo.git.diff(*args)
|
diffs += self.repo.git.diff(*args)
|
||||||
|
return diffs
|
||||||
|
|
||||||
wd_args = ["--"] + list(fnames)
|
wd_args = ["--"] + list(fnames)
|
||||||
index_args = ["--cached"] + wd_args
|
index_args = ["--cached"] + wd_args
|
||||||
|
|
||||||
diffs = self.repo.git.diff(*index_args)
|
diffs += self.repo.git.diff(*index_args)
|
||||||
diffs += self.repo.git.diff(*wd_args)
|
diffs += self.repo.git.diff(*wd_args)
|
||||||
|
|
||||||
return diffs
|
return diffs
|
||||||
|
|
|
@ -548,6 +548,53 @@ three
|
||||||
|
|
||||||
self.assertEqual(len(saved_diffs), 2)
|
self.assertEqual(len(saved_diffs), 2)
|
||||||
|
|
||||||
|
def test_gpt_edit_to_existing_file_not_in_repo(self):
|
||||||
|
with GitTemporaryDirectory():
|
||||||
|
repo = git.Repo()
|
||||||
|
|
||||||
|
fname = Path("file.txt")
|
||||||
|
fname.write_text("one\n")
|
||||||
|
|
||||||
|
fname2 = Path("other.txt")
|
||||||
|
fname2.write_text("other\n")
|
||||||
|
repo.git.add(str(fname2))
|
||||||
|
|
||||||
|
repo.git.commit("-m", "initial")
|
||||||
|
|
||||||
|
io = InputOutput(yes=True)
|
||||||
|
coder = Coder.create(models.GPT4, "diff", io=io, fnames=[str(fname)])
|
||||||
|
|
||||||
|
def mock_send(*args, **kwargs):
|
||||||
|
coder.partial_response_content = f"""
|
||||||
|
Do this:
|
||||||
|
|
||||||
|
{str(fname)}
|
||||||
|
<<<<<<< HEAD
|
||||||
|
one
|
||||||
|
=======
|
||||||
|
two
|
||||||
|
>>>>>>> updated
|
||||||
|
|
||||||
|
"""
|
||||||
|
coder.partial_response_function_call = dict()
|
||||||
|
|
||||||
|
saved_diffs = []
|
||||||
|
|
||||||
|
def mock_get_commit_message(diffs, context):
|
||||||
|
saved_diffs.append(diffs)
|
||||||
|
return "commit message"
|
||||||
|
|
||||||
|
coder.repo.get_commit_message = MagicMock(side_effect=mock_get_commit_message)
|
||||||
|
coder.send = MagicMock(side_effect=mock_send)
|
||||||
|
|
||||||
|
coder.run(with_message="hi")
|
||||||
|
|
||||||
|
content = fname.read_text()
|
||||||
|
self.assertEqual(content, "two\n")
|
||||||
|
|
||||||
|
diff = saved_diffs[0]
|
||||||
|
self.assertIn("file.txt", diff)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue