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 sys
|
||||||
import argparse
|
import argparse
|
||||||
|
|
||||||
VERSION = "2025-06-07"
|
VERSION = "2025-06-07.1"
|
||||||
|
|
||||||
def get_commits(filename):
|
def get_commits(filename):
|
||||||
cmd = ['git', 'log', '--pretty=format:%h %ad %s', '--date=short', '--', 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
|
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.curs_set(0)
|
||||||
curses.mousemask(curses.ALL_MOUSE_EVENTS)
|
curses.mousemask(curses.ALL_MOUSE_EVENTS)
|
||||||
curses.mouseinterval(0)
|
curses.mouseinterval(0)
|
||||||
|
|
@ -117,7 +117,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
|
||||||
# Get diff information if needed
|
# Get diff information if needed
|
||||||
added_lines = []
|
added_lines = []
|
||||||
deleted_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)
|
added_lines, deleted_lines = get_diff_info(commit_hash, prev_commit_hash, filename)
|
||||||
|
|
||||||
# Enable nodelay for smoother scrolling
|
# 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:
|
if selected_commit < len(commits) - 1:
|
||||||
prev_commit_hash = commits[selected_commit + 1].split()[0]
|
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)
|
added_lines, deleted_lines = get_diff_info(commit_hash, prev_commit_hash, filename)
|
||||||
|
|
||||||
max_scroll = max(0, len(file_lines) - (height - 1))
|
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
|
# Create a map of line numbers to deleted lines for faster lookup
|
||||||
deleted_line_map = {}
|
deleted_line_map = {}
|
||||||
if show_deletions:
|
if show_whole_diff or show_deletions:
|
||||||
for del_line_num, del_content in deleted_lines:
|
for del_line_num, del_content in deleted_lines:
|
||||||
if del_line_num not in deleted_line_map:
|
if del_line_num not in deleted_line_map:
|
||||||
deleted_line_map[del_line_num] = []
|
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
|
line_num = i + scroll_offset + 1 # 1-based line number
|
||||||
|
|
||||||
# First add any deleted lines that come before this line
|
# 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]:
|
for del_content in deleted_line_map[line_num]:
|
||||||
display_lines.append({
|
display_lines.append({
|
||||||
'type': 'deleted',
|
'type': 'deleted',
|
||||||
|
|
@ -202,7 +202,7 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
|
||||||
|
|
||||||
# Check if this is an added line
|
# Check if this is an added line
|
||||||
is_added = False
|
is_added = False
|
||||||
if show_additions:
|
if show_whole_diff or show_additions:
|
||||||
for added_line_num, _ in added_lines:
|
for added_line_num, _ in added_lines:
|
||||||
if added_line_num == line_num:
|
if added_line_num == line_num:
|
||||||
is_added = True
|
is_added = True
|
||||||
|
|
@ -366,19 +366,11 @@ def main(stdscr, filename, show_additions=False, show_deletions=False):
|
||||||
|
|
||||||
def show_help():
|
def show_help():
|
||||||
"""Display help information"""
|
"""Display help information"""
|
||||||
print("A \"Git Time Machine\" for viewing file history.")
|
parser.print_help()
|
||||||
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")
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
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-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("--diff-deletions", action="store_true", help="Show deleted lines in red")
|
||||||
parser.add_argument("-v", "--version", action="store_true", help="Show version number")
|
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")
|
print(f"Error: File '{filename}' does not exist")
|
||||||
sys.exit(1)
|
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