1.能够输出行号以及状态的对比结果了2.第二次保存后进行对比报错

This commit is contained in:
2025-10-23 02:20:06 +08:00
parent 6e118ea05c
commit 25e03b4246
2 changed files with 36 additions and 87 deletions

63
app.py
View File

@@ -127,7 +127,20 @@ def levenshtein_distance_with_operations(s1:str, s2:str) -> Tuple[int, List[Tupl
class Cli:
def print_out(self) -> None:
print(self.prints, ConsoleFrontColor.RESET)
sp = self.prints.split("\n")
status_len = len(str(len(sp)))
for line_index, line in enumerate(sp):
if ConsoleFrontColor.GREEN in line and ConsoleFrontColor.RED in line:
perfix = f"{ConsoleFrontColor.YELLOW}@"
elif ConsoleFrontColor.GREEN in line:
perfix = f"{ConsoleFrontColor.GREEN}+"
elif ConsoleFrontColor.RED in line:
perfix = f"{ConsoleFrontColor.RED}-"
else:
perfix = "="
print(f"{perfix}{line_index}{" "*max(0,status_len-len(str(line_index)))}{ConsoleFrontColor.RESET} | {line}")
print(ConsoleFrontColor.RESET)
def print(self, *args) -> None:
self.prints += "".join(args)
@@ -156,34 +169,36 @@ class Cli:
current_content = self.file.LoadAsText()
step, operations = levenshtein_distance_with_operations(head_commit, current_content)
if step == 0:
self.print(f"{ConsoleFrontColor.LIGHTMAGENTA_EX}No changes")
PrintColorful(ConsoleFrontColor.LIGHTMAGENTA_EX, "No changes")
return
index = 0
for operation in operations:
# 显示操作前的不变内容
sp = head_commit[index:operation[1]].split("\n")
if len(sp) > 3:
self.print("\n".join(sp[-3:]))
else:
self.print("\n".join(sp))
self.print(head_commit[index:operation[1]])
if operation[0] == "add":
self.print(f"{ConsoleFrontColor.GREEN}{operation[3]}{ConsoleFrontColor.RESET}")
index = operation[2]
color = ConsoleFrontColor.GREEN
elif operation[0] == "delete":
self.print(f"{ConsoleFrontColor.RED}{operation[3]}{ConsoleFrontColor.RESET}")
index = operation[2]
color = ConsoleFrontColor.RED
else:
raise ValueError(f"Invalid operation: {operation}")
sp = head_commit[index:].split("\n")
if len(sp) > 3:
self.print("\n".join(sp[:3]))
else:
self.print("\n".join(sp))
sp = operation[3].split("\n")
if operation[3][0] == "\n":
self.print("\n")
for line_index, line in enumerate(sp):
self.print(f"{color}{line}{ConsoleFrontColor.RESET}")
if line_index == len(sp) - 1:
if operation[3][-1] == "\n":
self.print("\n")
else:
self.print("\n")
index = operation[2]
self.print(head_commit[index:])
self.print_out()
self.print(f"\n{ConsoleFrontColor.LIGHTMAGENTA_EX}operations:\n")
self.print(f"{'\n'.join([f"{ConsoleFrontColor.GREEN if item[0] == "add" else ConsoleFrontColor.RED}{item[0]}{ConsoleFrontColor.RESET} \"{item[3]}\" on [{item[1]},{item[2]}]" for item in operations])}")
PrintColorful(ConsoleFrontColor.LIGHTMAGENTA_EX, "\noperations:")
print(f"{'\n'.join([f"{ConsoleFrontColor.GREEN if item[0] == "add" else ConsoleFrontColor.RED}{item[0]}{ConsoleFrontColor.RESET} \"{ConsoleFrontColor.YELLOW}{item[3]}{ConsoleFrontColor.RESET}\" on [{item[1]},{item[2]}]" for item in operations])}")
def save(self) -> None:
@@ -239,17 +254,11 @@ def run() -> int:
# 比较
if args.compare:
try:
cli.compare()
finally:
cli.print_out()
cli.compare()
return 0
# 保存
elif args.save:
try:
cli.save()
finally:
cli.print_out()
cli.save()
return 0
raise NotImplementedError("Not implemented mode")