mirror of
https://github.com/Aider-AI/aider.git
synced 2025-05-20 20:35:00 +00:00
Handle binary files gracefully in base_coder.py
This commit is contained in:
parent
2582a845dc
commit
fbdf3ce823
1 changed files with 31 additions and 15 deletions
|
@ -572,6 +572,7 @@ class Coder:
|
|||
|
||||
def get_abs_fnames_content(self):
|
||||
for fname in list(self.abs_fnames):
|
||||
try:
|
||||
content = self.io.read_text(fname)
|
||||
|
||||
if content is None:
|
||||
|
@ -580,15 +581,25 @@ class Coder:
|
|||
self.abs_fnames.remove(fname)
|
||||
else:
|
||||
yield fname, content
|
||||
except UnicodeDecodeError:
|
||||
# Skip binary files that can't be decoded as text
|
||||
relative_fname = self.get_rel_fname(fname)
|
||||
self.io.tool_warning(f"Dropping binary file {relative_fname} from the chat.")
|
||||
self.abs_fnames.remove(fname)
|
||||
|
||||
def choose_fence(self):
|
||||
all_content = ""
|
||||
for _fname, content in self.get_abs_fnames_content():
|
||||
all_content += content + "\n"
|
||||
for _fname in self.abs_read_only_fnames:
|
||||
try:
|
||||
content = self.io.read_text(_fname)
|
||||
if content is not None:
|
||||
all_content += content + "\n"
|
||||
except UnicodeDecodeError:
|
||||
# Skip binary files that can't be decoded as text
|
||||
relative_fname = self.get_rel_fname(_fname)
|
||||
self.io.tool_warning(f"Skipping binary file {relative_fname} when choosing fence.")
|
||||
|
||||
lines = all_content.splitlines()
|
||||
good = False
|
||||
|
@ -634,6 +645,7 @@ class Coder:
|
|||
def get_read_only_files_content(self):
|
||||
prompt = ""
|
||||
for fname in self.abs_read_only_fnames:
|
||||
try:
|
||||
content = self.io.read_text(fname)
|
||||
if content is not None and not is_image_file(fname):
|
||||
relative_fname = self.get_rel_fname(fname)
|
||||
|
@ -642,6 +654,10 @@ class Coder:
|
|||
prompt += f"\n{self.fence[0]}\n"
|
||||
prompt += content
|
||||
prompt += f"{self.fence[1]}\n"
|
||||
except UnicodeDecodeError:
|
||||
# Skip binary files that can't be decoded as text
|
||||
relative_fname = self.get_rel_fname(fname)
|
||||
self.io.tool_warning(f"Skipping binary file {relative_fname} from read-only files.")
|
||||
return prompt
|
||||
|
||||
def get_cur_message_text(self):
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue