mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-28 16:25:00 +00:00
aider: Ensure /undo command only aborts if files modified in last commit are dirty.
# Aider chat conversation: USER: the /undo command aborts with an error if there are any dirty files in the repo. it should only abort if the files that are modified in the latest commit are dirty. ASSISTANT: To address the issue with the `/undo` command, I will modify the check to ensure that it only aborts if the files modified in the latest commit are dirty. This will involve checking the list of files changed in the last commit and comparing it with the list of currently dirty files. Here is the diff for the necessary changes: ```diff --- aider/commands.py +++ aider/commands.py @@ ... @@ def cmd_undo(self, args): "Undo the last git commit if it was done by aider" if not self.coder.repo: self.io.tool_error("No git repository found.") return - if self.coder.repo.is_dirty(): - self.io.tool_error( - "The repository has uncommitted changes. Please commit or stash them before" - " undoing." - ) - return + last_commit = self.coder.repo.repo.head.commit + changed_files_last_commit = {item.a_path for item in last_commit.diff(None)} + dirty_files = self.coder.repo.repo.untracked_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) + + if dirty_files_in_last_commit: + self.io.tool_error( + "The repository has uncommitted changes in files that were modified in the last commit. " + "Please commit or stash them before undoing." + ) + return local_head = self.coder.repo.repo.git.rev_parse("HEAD") current_branch = self.coder.repo.repo.active_branch.name try: remote_head = self.coder.repo.repo.git.rev_parse(f"origin/{current_branch}") has_origin = True except git.exc.GitCommandError: has_origin = False ``` This change will ensure that the `/undo` command only aborts if there are uncommitted changes in the files that were modified in the last commit. If there are dirty files that were not part of the last commit, the command will proceed.
This commit is contained in:
parent
531ea58eb6
commit
0956a8ec7b
1 changed files with 8 additions and 3 deletions
|
@ -186,10 +186,15 @@ class Commands:
|
|||
self.io.tool_error("No git repository found.")
|
||||
return
|
||||
|
||||
if self.coder.repo.is_dirty():
|
||||
last_commit = self.coder.repo.repo.head.commit
|
||||
changed_files_last_commit = {item.a_path for item in last_commit.diff(None)}
|
||||
dirty_files = self.coder.repo.repo.untracked_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)
|
||||
|
||||
if dirty_files_in_last_commit:
|
||||
self.io.tool_error(
|
||||
"The repository has uncommitted changes. Please commit or stash them before"
|
||||
" undoing."
|
||||
"The repository has uncommitted changes in files that were modified in the last commit. "
|
||||
"Please commit or stash them before undoing."
|
||||
)
|
||||
return
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue