1.能够输出行号以及状态的对比结果了2.第二次保存后进行对比报错
This commit is contained in:
63
app.py
63
app.py
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user