feat: Add whole diff option and improve help display for GTM
This commit is contained in:
parent
54b361aead
commit
0ba3259319
30
gtm
30
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)
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue