fix bug if ORIG/UPD block is missing trailing newline; added test

This commit is contained in:
Paul Gauthier 2023-05-12 13:30:39 -07:00
parent 1d7fffe8ab
commit 92e091f5a6
2 changed files with 41 additions and 16 deletions

View file

@ -129,22 +129,6 @@ def show_messages(messages, title):
print(role, line)
pattern = re.compile(
# Optional: Matches the start of a code block (e.g., ```python) and any following whitespace
r"(^```\S*\s*)?"
# Matches the file path
r"^(\S+)\s*"
# Optional: Matches the end of a code block (e.g., ```) and any following whitespace
r"(^```\S*\s*)?"
# Matches the start of the ORIGINAL section and captures its content
r"^<<<<<<< ORIGINAL\n(.*?\n?)"
# Matches sep between ORIGINAL and UPDATED sections, captures UPDATED content
r"^=======\n(.*?)"
# Matches the end of the UPDATED section
r"^>>>>>>> UPDATED",
re.MULTILINE | re.DOTALL,
)
ORIGINAL = "<<<<<<< ORIGINAL"
DIVIDER = "======="
UPDATED = ">>>>>>> UPDATED"
@ -155,6 +139,10 @@ split_re = re.compile(r"^((?:" + separators + r")[ ]*\n)", re.MULTILINE | re.DOT
def find_original_update_blocks(content):
# make sure we end with a newline, otherwise the regex will miss <<UPD on the last line
if not content.endswith("\n"):
content = content + "\n"
pieces = re.split(split_re, content)
pieces.reverse()

View file

@ -1,3 +1,5 @@
# flake8: noqa: E501
import unittest
from aider import utils
@ -116,6 +118,41 @@ oops!
list(utils.find_original_update_blocks(edit))
self.assertIn("filename", str(cm.exception))
def test_find_original_update_blocks_no_final_newline(self):
edit = """
aider/coder.py
<<<<<<< ORIGINAL
self.console.print("[red]^C again to quit")
=======
self.io.tool_error("^C again to quit")
>>>>>>> UPDATED
aider/coder.py
<<<<<<< ORIGINAL
self.io.tool_error("Malformed ORIGINAL/UPDATE blocks, retrying...")
self.io.tool_error(err)
=======
self.io.tool_error("Malformed ORIGINAL/UPDATE blocks, retrying...")
self.io.tool_error(str(err))
>>>>>>> UPDATED
aider/coder.py
<<<<<<< ORIGINAL
self.console.print("[red]Unable to get commit message from gpt-3.5-turbo. Use /commit to try again.\n")
=======
self.io.tool_error("Unable to get commit message from gpt-3.5-turbo. Use /commit to try again.")
>>>>>>> UPDATED
aider/coder.py
<<<<<<< ORIGINAL
self.console.print("[red]Skipped commmit.")
=======
self.io.tool_error("Skipped commmit.")
>>>>>>> UPDATED"""
# Should not raise a ValueError
list(utils.find_original_update_blocks(edit))
if __name__ == "__main__":
unittest.main()