mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-25 06:44:59 +00:00
use safe repo.get_head methods
This commit is contained in:
parent
8678a6455f
commit
d2acb9c3b0
3 changed files with 28 additions and 12 deletions
|
@ -713,7 +713,7 @@ class Coder:
|
|||
self.shell_commands = []
|
||||
|
||||
if self.repo:
|
||||
self.commit_before_message.append(self.repo.get_head())
|
||||
self.commit_before_message.append(self.repo.get_head_sha())
|
||||
|
||||
def run(self, with_message=None, preproc=True):
|
||||
try:
|
||||
|
@ -1867,7 +1867,7 @@ class Coder:
|
|||
def show_undo_hint(self):
|
||||
if not self.commit_before_message:
|
||||
return
|
||||
if self.commit_before_message[-1] != self.repo.get_head():
|
||||
if self.commit_before_message[-1] != self.repo.get_head_sha():
|
||||
self.io.tool_output("You can use /undo to undo and discard each aider commit.")
|
||||
|
||||
def dirty_commit(self):
|
||||
|
|
|
@ -420,8 +420,8 @@ class Commands:
|
|||
self.io.tool_error("No git repository found.")
|
||||
return
|
||||
|
||||
last_commit = self.coder.repo.repo.head.commit
|
||||
if not last_commit.parents:
|
||||
last_commit = self.coder.repo.get_head()
|
||||
if last_commit and not last_commit.parents:
|
||||
self.io.tool_error("This is the first commit in the repository. Cannot undo.")
|
||||
return
|
||||
|
||||
|
@ -461,8 +461,9 @@ class Commands:
|
|||
)
|
||||
return
|
||||
|
||||
last_commit_hash = self.coder.repo.repo.head.commit.hexsha[:7]
|
||||
last_commit_message = self.coder.repo.repo.head.commit.message.strip()
|
||||
last_commit_hash = self.coder.repo.get_head_sha(short=True)
|
||||
last_commit_message = self.coder.repo.get_head_message("(unknown)")
|
||||
|
||||
if last_commit_hash not in self.coder.aider_commit_hashes:
|
||||
self.io.tool_error("The last commit was not made by aider in this chat session.")
|
||||
self.io.tool_error(
|
||||
|
@ -481,8 +482,8 @@ class Commands:
|
|||
self.io.tool_output(f"Removed: {last_commit_hash} {last_commit_message}")
|
||||
|
||||
# Get the current HEAD after undo
|
||||
current_head_hash = self.coder.repo.repo.head.commit.hexsha[:7]
|
||||
current_head_message = self.coder.repo.repo.head.commit.message.strip()
|
||||
current_head_hash = self.coder.repo.get_head_sha(short=True)
|
||||
current_head_message = self.coder.repo.get_head_message("(unknown)")
|
||||
self.io.tool_output(f"Now at: {current_head_hash} {current_head_message}")
|
||||
|
||||
if self.coder.main_model.send_undo_reply:
|
||||
|
@ -494,7 +495,7 @@ class Commands:
|
|||
self.io.tool_error("No git repository found.")
|
||||
return
|
||||
|
||||
current_head = self.coder.repo.get_head()
|
||||
current_head = self.coder.repo.get_head_sha()
|
||||
if current_head is None:
|
||||
self.io.tool_error("Unable to get current commit. The repository might be empty.")
|
||||
return
|
||||
|
|
|
@ -3,6 +3,7 @@ import time
|
|||
from pathlib import Path, PurePosixPath
|
||||
|
||||
import git
|
||||
import gitdb
|
||||
import pathspec
|
||||
|
||||
from aider import prompts, utils
|
||||
|
@ -137,7 +138,7 @@ class GitRepo:
|
|||
os.environ["GIT_AUTHOR_NAME"] = committer_name
|
||||
|
||||
self.repo.git.commit(cmd)
|
||||
commit_hash = self.repo.head.commit.hexsha[:7]
|
||||
commit_hash = self.get_head_sha(short=True)
|
||||
self.io.tool_output(f"Commit {commit_hash} {commit_message}", bold=True)
|
||||
|
||||
# Restore the env
|
||||
|
@ -374,6 +375,20 @@ class GitRepo:
|
|||
|
||||
def get_head(self):
|
||||
try:
|
||||
return self.repo.head.commit.hexsha
|
||||
except ValueError:
|
||||
return self.repo.head.commit
|
||||
except (ValueError, gitdb.exc.ODBError):
|
||||
return None
|
||||
|
||||
def get_head_sha(self, short=False):
|
||||
commit = self.get_head()
|
||||
if not commit:
|
||||
return
|
||||
if short:
|
||||
return commit.hexsha[:7]
|
||||
return commit.hexsha
|
||||
|
||||
def get_head_message(self, default=None):
|
||||
commit = self.get_head()
|
||||
if not commit:
|
||||
return default
|
||||
return commit.message
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue