feat: Add whole diff option and improve help display for GTM

This commit is contained in:
n loewen 2025-06-07 20:15:24 +01:00 committed by n loewen (aider)
parent 54b361aead
commit 0ba3259319
1 changed files with 11 additions and 19 deletions

30
gtm
View File

@ -6,7 +6,7 @@ import subprocess
import sys
import argparse
VERSION = "2025-06-07"
VERSION = "2025-06-07.1"
def get_commits(filename):
cmd = ['git', 'log', '--pretty=format:%h %ad %s', '--date=short', '--', filename]
@ -79,7 +79,7 @@ def get_diff_info(current_commit, prev_commit, filename):
return added_lines, deleted_lines
def main(stdscr, filename, show_additions=False, show_deletions=False):
def main(stdscr, filename, show_whole_diff=False, show_additions=False, show_deletions=False):
curses.curs_set(0)
curses.mousemask(curses.ALL_MOUSE_EVENTS)
curses.mouseinterval(0)
@ -117,7 +117,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
# Get diff information if needed
added_lines = []
deleted_lines = []
if show_additions or show_deletions:
if show_whole_diff or show_additions or show_deletions:
added_lines, deleted_lines = get_diff_info(commit_hash, prev_commit_hash, filename)
# Enable nodelay for smoother scrolling
@ -137,7 +137,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
if selected_commit < len(commits) - 1:
prev_commit_hash = commits[selected_commit + 1].split()[0]
if show_additions or show_deletions:
if show_whole_diff or show_additions or show_deletions:
added_lines, deleted_lines = get_diff_info(commit_hash, prev_commit_hash, filename)
max_scroll = max(0, len(file_lines) - (height - 1))
@ -181,7 +181,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
# Create a map of line numbers to deleted lines for faster lookup
deleted_line_map = {}
if show_deletions:
if show_whole_diff or show_deletions:
for del_line_num, del_content in deleted_lines:
if del_line_num not in deleted_line_map:
deleted_line_map[del_line_num] = []
@ -192,7 +192,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
line_num = i + scroll_offset + 1 # 1-based line number
# First add any deleted lines that come before this line
if show_deletions and line_num in deleted_line_map:
if (show_whole_diff or show_deletions) and line_num in deleted_line_map:
for del_content in deleted_line_map[line_num]:
display_lines.append({
'type': 'deleted',
@ -202,7 +202,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
# Check if this is an added line
is_added = False
if show_additions:
if show_whole_diff or show_additions:
for added_line_num, _ in added_lines:
if added_line_num == line_num:
is_added = True
@ -366,19 +366,11 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
def show_help():
"""Display help information"""
print("A \"Git Time Machine\" for viewing file history.")
print()
print("Usage:")
print("\tgtm [OPTIONS] FILENAME")
print()
print("Options:")
print("\t--diff-additions\thighlight newly added lines in green")
print("\t--diff-deletions\tshow deleted lines in red")
print("\t-v, --version\tshow version number")
print("\t-h, --help\tshow this help")
parser.print_help()
if __name__ == "__main__":
parser = argparse.ArgumentParser(add_help=False, description="A Git Time Machine for viewing file history.")
parser = argparse.ArgumentParser(add_help=False, description="A \"Git Time Machine\" for viewing file history")
parser.add_argument("-d, --diff", action="store_true", help="Highlight newly added and deleted lines")
parser.add_argument("--diff-additions", action="store_true", help="Highlight newly added lines in green")
parser.add_argument("--diff-deletions", action="store_true", help="Show deleted lines in red")
parser.add_argument("-v", "--version", action="store_true", help="Show version number")
@ -401,5 +393,5 @@ if __name__ == "__main__":
print(f"Error: File '{filename}' does not exist")
sys.exit(1)
curses.wrapper(main, filename, args.diff_additions, args.diff_deletions)
curses.wrapper(main, filename, args.diff, args.diff_additions, args.diff_deletions)