From 0ba3259319d5202583ec36cfa1cf200ee81b480e Mon Sep 17 00:00:00 2001 From: n loewen Date: Sat, 7 Jun 2025 20:15:24 +0100 Subject: [PATCH] feat: Add whole diff option and improve help display for GTM --- gtm | 30 +++++++++++------------------- 1 file changed, 11 insertions(+), 19 deletions(-) diff --git a/gtm b/gtm index 0646274..0dafc74 100755 --- a/gtm +++ b/gtm @@ -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)