tog/tog.c


Log

Author Commit Date CI Message
Stefan Sperling 528dedf3 2021-08-30T19:46:56 make tog block other keys except Backspace after End/G is pressed This should avoid unexpected behaviour resulting from unrelated key presses messing with the log view's state variables. Pointed out by tracey, and also discussed with jasper. ok tracey
Christian Weisgerber 00f6361c 2021-08-30T19:12:04 remove the 'ctrl+u' shortcut in favor of just 'g' in the diff view, too
Stefan Sperling 75149077 2021-08-30T19:07:58 make tog ignore Ctrl+L and B while loading all commits Otherwise tog gets into a funky non-recoverable state if these keys are pressed instead of Backspace while commits are loading. bug found by + ok tracey
Stefan Sperling 27890b18 2021-08-30T18:54:51 remove the 'ctrl+u' shortcut in favour of just 'g' as alias for 'Home' Our use of ctrl+u was not consistent with vi(1) after all. Discussed with naddy, tb, and jasper on gameoftrees@
Stefan Sperling fb280deb 2021-08-30T18:48:21 Allow commit loading trigged by the End/G keys to be cancelled with Backspace. ok jasper
Jasper Lievisse Adriaanse 912a3f79 2021-08-30T17:49:33 tog: add support for navigating to first/last item of log and diff views The keybindings that we settled on are Home, Ctrl-u and g to go to the first item and End, G to go to the last. This resembles those commonly found elsewhere, eg vi/less. discussed with and ok stsp
Stefan Sperling e385fc42 2021-08-30T15:48:05 use gmtime_r(3) instead of localtime_r(3) to display time in UTC as intended Problem noticed by naddy due to failing regress tests at midnight, and then analyzed with additional help from millert. ok naddy
Stefan Sperling aa8b5dd0 2021-08-01T12:59:32 fix a use-after-free in get_changed_paths() in got and tog Once the parent commit is closed the tree_id1 pointer is no longer valid, but the pointer was still being used. Make a deep copy to fix this issue.
Stefan Sperling 267bb3b8 2021-08-01T10:14:48 plug a small memory leak in tog's show_diff_view() function
Stefan Sperling ff6cc066 2021-07-10T22:48:52 remove now unused variable in browse_ref_tree() I overlooked; patch by naddy
Stefan Sperling bc573f3b 2021-07-10T22:47:23 fix a double-free that ocurred upon exit from 'tog tree'; found by naddy
Christian Weisgerber dbdddfee 2021-06-23T20:48:35 switch from SIMPLEQ to equivalent STAILQ macros The singly-linked tail queue macros were added to OpenBSD 6.9 and are more widely available on other systems. ok stsp
Stefan Sperling 1d0f4054 2021-06-17T08:56:43 check for close(2) error in got_repo_close() and propagate errors up ok tracey
Josh Rickmar ec6d1a36 2021-03-21T18:49:57 Fix strftime(3) short buffer checks strftime(3) returns 0 if the buffer was too short to write the complete string (including NUL) and will never return more than maxsize-1. ok stsp
Stefan Sperling c0c4acc8 2021-01-24T18:55:17 tog: fix behaviour when 'n' is pressed before a search was started with '/' reported by + ok naddy
Stefan Sperling 56b63ca4 2021-01-22T11:04:47 make fclose(3) failure checks consistent; check 'fclose() == EOF' everywhere ok millert, naddy
Stefan Sperling 1fddf795 2021-01-20T20:33:17 fix 'tog blame' segfault upon empty input file; reported by + ok naddy
Christian Weisgerber e6b8b890 2020-12-29T15:12:53 tog log: terminate author field at '>' in case there is no '@' ok stsp
Stefan Sperling f193b038 2020-12-26T22:39:55 rename got_reflist_object_map_free to got_reflist_object_id_map_free
Stefan Sperling dae613fa 2020-12-26T21:40:26 remove a comment that is now misleading
Stefan Sperling d9dff0e5 2020-12-26T21:32:01 switch reflist to TAILQ; insert elements more efficiently for sorted input ok naddy
Christian Weisgerber 87670572 2020-12-26T21:15:38 switch the "tog <path>" log view shortcut to the global reference list, too ok stsp
Stefan Sperling 84de9106 2020-12-26T20:48:43 Add a refs argument to got_repo_match_object_id(), replacing 'resolve_tags' Make use of this where possible to avoid re-reading references from disk. ok naddy
Stefan Sperling 8924d611 2020-12-26T19:23:06 switch tog ref view to the global reference list as well ok naddy
Stefan Sperling 51a10b52 2020-12-26T19:23:06 make tog store refs and object id map in global variables instead of per view ok naddy
Stefan Sperling d2075bf3 2020-12-25T21:38:17 make use of reflist object id maps in tog log and diff views This is a partial fix for performance issues when browsing the FreeBSD Git repo, which can easily contain more than 4000 references. ok naddy
Stefan Sperling c156c7a4 2020-12-18T19:19:46 do not mix up repositories if tog's -r option is used inside a work tree with input from and ok naddy
Stefan Sperling 6059809a 2020-12-17T15:54:47 use size_t for loop indices to avoid signedness warnings; by emaste@freebsd Same change as 16aeacf7088d, for subdirectories other than lib/
Christian Weisgerber 748d5cab 2020-12-14T22:15:50 replace unprintable characters with '.' before passing them to curses Otherwise, ncurses will replace them with some printable representation whose width we can't predict, and wunctrl() fails to return the replacement for 0x80..0x9f. ok stsp
Christian Weisgerber f5a09613 2020-12-13T19:07:20 reset tog blame view's scroll position if line count shrinks too much ok stsp
Christian Weisgerber 7f64f4d6 2020-12-10T23:42:06 accommodate newer ncurses where panel_userptr() returns a const pointer ok stsp
Stefan Sperling 826082fe 2020-12-10T23:35:19 use getline(3) instead of fparseln(3) in tog, for better portability ok millert
Stefan Sperling 3f670bfb 2020-12-10T21:59:00 fix display of lines that end in "\r\n" in tog(1) Problem found and reported by jrick ok naddy
Stefan Sperling 9cd7cbd1 2020-12-07T13:13:41 deep-copy reference names in the log and tree views to prevent use-after-free ok naddy
Christian Weisgerber bf30f154 2020-12-07T11:47:20 miscellaneous minor style issues
Stefan Sperling ca51c541 2020-12-07T01:03:40 reload references when the log view is restarted with Ctrl-L
Christian Weisgerber 4e0d2870 2020-12-07T00:23:33 pass the thread_args struct to queue_commits() and trim the parameter list ok stsp
Stefan Sperling 1e1ff4ed 2020-12-07T00:06:56 move the tree view's selection cursor up if the terminal shrinks too much ok naddy
Stefan Sperling 8b5b8d0c 2020-12-06T23:07:07 move the ref view's selection cursor up if the terminal shrinks too much bug found by naddy ok naddy
Stefan Sperling cdfcfb03 2020-12-06T22:50:34 send resize events to tog child views as well as parent views problem found by naddy ok naddy
Stefan Sperling 21355643 2020-12-06T22:03:32 fix crashes when the 'tog log' view reloads displayed data This reimplements log view reloading (Ctrl-L), logging of a parent path (Backspace), and the toggle to show commits on branches (B). The idea is to reuse the existing log view and change its state, instead of allocating a new view with a new state and replacing the existing view. Fixes a segfault that occurs when a parent path is logged with Backspace: tog tree -r got.git -c 0.44 pick tog/tog.c 'l' Backspace -> tog will segfault The first change in this patch is a partial fix. The log thread should always check the 'quit' flag as soon as it wakes from sleep. Otherwise it could try to load more commits after waking up and before checking the 'quit' flag. It will then attempt to load commits with a NULL commit graph pointer. This partial fix by itself is not sufficient to fix the crash, since we'll now see a bus error in the main thread, instead of a NULL deref in the log thread. The remainder of the patch fixes this bus error. ok naddy
Stefan Sperling 486cd271 2020-12-06T20:12:42 plug leak of ref in cmd_tree(); found by naddy
Stefan Sperling 4e97c21c 2020-12-06T20:12:42 make tog tree view keep track of branches/tags specified via -c ok naddy
Stefan Sperling d8f38dc4 2020-12-05T22:14:04 make ^L in the tog log view stick to branches/tags selected via the -c option Previously, the log view would remember the branch of the work tree in which tog was started, and jump back to that branch upon ^L even if a different branch was requested via -c. ok naddy
Stefan Sperling 5a8b5076 2020-12-05T16:58:37 do not recompute the displayed diff if '<' or '>' command cannot advance Recomputing a diff can take time. Only do it if a different commit is going to be displayed.
Stefan Sperling fb59748f 2020-12-05T16:58:37 garbage-collect pointless main_view variable in view_loop() This short-cut is not necessary and was buggy: The pointer was not updated even if the main view had changed. Removing this code fixes a problem on FreeBSD where pressing 'q' in a child view caused tog to exit. ok naddy
Christian Weisgerber 2b779855 2020-12-05T16:19:55 fix move to next/prev commit in diff view when the log view is not displayed Original analysis and final tweak by yours truly, all the hard work of fixing the program logic by stsp. ok stsp
Stefan Sperling ee756517 2020-12-05T13:12:32 pass reference name along when a log view is opened from a ref view ok naddy
Stefan Sperling e78dc838 2020-12-04T23:27:22 replace 'focus_view' output param of view_input with 'view->focussed'
Stefan Sperling 4010e238 2020-12-04T23:27:05 make tog call pledge(2) directly in main() instead of per-command All of tog's pledges are currently the same, and they must be the same because tog allows switching between available command views at run-time. ok tracey
Stefan Sperling 9970f7fc 2020-12-03T23:23:30 replace dead_view pointer in view_loop() with 'dying' flag in struct tog_view ok naddy
Stefan Sperling 72a9cb46 2020-12-03T22:13:20 tog's view_set_child() never returned an error; simplify accordingly ok naddy
Stefan Sperling acdafe9c 2020-12-03T19:25:08 remove redundant "child_focussed" variable from struct tog_view ok naddy
Christian Weisgerber 0bf7f153 2020-12-02T14:30:34 tog's log view needs to request more commits when the window expands ok stsp
Christian Weisgerber 3e135950 2020-12-01T23:50:40 pass only the view state to scroll functions that don't need the full view ok stsp
Christian Weisgerber 42a2230c 2020-12-01T22:54:25 reverse tree_view_visit_subtree() parameters for consistency ok stsp
Christian Weisgerber d91faf3b 2020-12-01T22:53:48 trim repo parameter from tree_view_walk_path(), already set by open_tree_view() ok stsp
Christian Weisgerber d86d3b18 2020-12-01T22:52:56 trim redundant and used parameters from draw_tree_entries() ok stsp
Christian Weisgerber 4f7c3e5e 2020-12-01T22:52:18 trim redundant parameters from draw_blame() ok stsp
Christian Weisgerber 89f1a395 2020-12-01T22:51:37 trim redundant parameters from draw_file() ok stsp
Christian Weisgerber 8fdc79fe 2020-12-01T22:50:35 trim redundant and unused parameters from draw_commits() and draw_commit() ok stsp
Christian Weisgerber a5388363 2020-12-01T22:06:20 trim redundant and unused parameters from run_blame() ok stsp
Christian Weisgerber ffe38506 2020-12-01T22:05:10 trim redundant parameters from log_scroll_* and trigger_log_thread functions Also rename scroll_{up,down} to log_scroll_{up,down}; requested by stsp. ok stsp
Christian Weisgerber 694d3271 2020-12-01T14:53:55 trim redundant parameters from {ref,tree}_scroll_{up,down} functions Pass only the view and scroll amount to these functions; remove unused parameters and those that are contained in the view state. ok stsp
Stefan Sperling 34ba6917 2020-11-30T00:13:22 fix page-up/down in 'tog ref' view; ok naddy
Stefan Sperling fa86c4bf 2020-11-29T21:53:49 fix page-down/page-up scrolling in the tog tree view problem reported by, fixed with lots of help from, and ok naddy
Stefan Sperling 152c1c93 2020-11-29T14:21:55 tog: make it possible to open a ref view from the tree view
Christian Weisgerber 9a1d5146 2020-11-27T15:46:36 fix entry selection when moving to the parent in tog's tree view The tree view attempts to keep the scroll position of an already visited parent directory intact. If we start out by viewing a subtree and then move up, the scroll position of the parent isn't actually available since the parent tree was never nagivated by the user. In this case tree_view_walk_path() has to fill in some values. The only parent entry we know about in this case is the one which was traversed to reach the child. The best we can do is to lock the parent's scroll position such that the traversed child entry appears at the top of the list if moving up to the parent's view. If we then navigate down again and return, the parent's scroll position will start to be retained and restored properly. Analysis and draft patch by stsp, initial report and simpler fix by yours truly. ok stsp
Christian Weisgerber e99e2d15 2020-11-24T22:38:29 let tog's tree and ref commands call their own usage() and not each other's
Stefan Sperling c42c9805 2020-11-24T22:17:55 support opening a tree view from the ref view; requested by naddy
Stefan Sperling f2f6d207 2020-11-24T22:17:54 trigger log thread if a log view is opened as a child view; found by naddy
Stefan Sperling a1b77402 2020-11-24T22:17:54 fix calls to ref_usage(); found by naddy
Stefan Sperling 6458efa5 2020-11-24T22:17:54 initial 'tog ref' implementation ok naddy tracey
Stefan Sperling 78756c87 2020-11-24T21:25:40 store reflists in view state where required and get rid of reflist pointers ok tracey naddy
Stefan Sperling 3dbaef42 2020-11-24T15:52:41 make 'tog diff' accept reference and tag arguments; add -w and -C options ok naddy tracey
Stefan Sperling 27829c9e 2020-11-21T13:41:51 reset tog diff view's scroll position if diff context shrinks too much
Stefan Sperling 64453f7e 2020-11-21T13:35:00 handle binary files in got/tog diff commands; add -a options to force text
Stefan Sperling be659d10 2020-11-18T17:18:23 fix type of filesize output parameter of got_object_blob_dump_to_file()
Stefan Sperling 8fa913ec 2020-11-14T13:19:18 remove now pointless 'check_disk' parameter of got_repo_map_path() suggested by naddy
Stefan Sperling bfd61697 2020-11-14T13:11:34 make tog avoid got_repo_map_path() if a work tree is available ok naddy
Christian Weisgerber 276b94a1 2020-11-13T21:09:10 Call pthread_cond_destroy(cond) exactly once when closing a view. This moves the pthread_cond_destroy(need_commits) from stop_log_thread(), which can be called twice, to close_log_view(), which is called once. It also destroys the commit_loaded condition variable, which is created in open_log_view() but was never destroyed. ok stsp
Stefan Sperling 41605754 2020-11-12T18:54:38 highlight matched search terms in tog diff and tog blame views ok naddy@
Stefan Sperling 135a2da0 2020-11-11T00:35:23 show current/total line numbers in tog's diff view header
Stefan Sperling e54cc94a 2020-11-11T00:34:59 plug two memory leaks in tog's draw_file()
Stefan Sperling fe621944 2020-11-10T22:54:37 merge new diff implementation from the git.gameoftrees.org diff.git repository This new diff implementation was started by Neels Hofmeyr during the u2k20 hackathon and now replaces diffreg.c code lifted from the OpenBSD base system. The integration of this code into Got was done by me. Got now uses the patience diff algorithm by default. The diff.git repository will remain the primary repository for the diff code, which already compiles and runs on other operating systems such as Linux. Any fixes and improvements for files inherited from the diff.git repository should be written against that repository and synced to got.git afterwards.
Christian Weisgerber 62d463ca 2020-10-20T22:43:59 indentation fixes
Stefan Sperling 74cfe85e 2020-10-20T21:09:01 use got_path_dirname() in tog's input_log_view(); avoids const dirname(3) ok naddy
Christian Weisgerber 6879ba42 2020-10-01T15:15:22 do not treat the -h and -V flags as errors When run with the -h or -V option, output the help or version text to stdout and exit with success (0). Only write usage and help information to stderr and exit with error (1) if there is a mistake in the command syntax. tweak and ok stsp
Christian Weisgerber 9814e6a3 2020-09-27T14:55:18 prefer the BSD extension to reset getopt over the GNU one Sadly there is no portable way to reset getopt(3). BSD: optind = 1; optreset = 1; GNU: optind = 0; ok stsp
Stefan Sperling 48cae60d 2020-09-22T00:03:02 make dangling symbolic references show up in 'got ref -l' Storing a resolved ID for each reference list item was a bad idea. This ID cannot be resolved if a symbolic references points to a reference which does not exist. Such symrefs were skipped by got ref -l as a result. Just let users of reference lists resolve the IDs as needed.
Christian Weisgerber b46c1e04 2020-09-20T22:22:04 Print newline to clear the bottom line when tog exits. When a curses(3)-based application exits, the cursor is positioned at the start of the bottom line, and the shell will issue the new prompt there. However, the bottom line may still contain remnants of the curses screen. This is only noticeable on terminals that do not switch to/from an alternate screen buffer. ok stsp
Stefan Sperling ae6a6978 2020-08-09T21:56:11 speed up 'tog diff' get_filestream_info() a bit With this, 'tog diff' is able to display clang 10 commits. However, such huge diffs still take a rather long time to open. get_filestream_info() is a hack. Ideally, diff line-offset information needed by tog should be part of the result of the diff operation, rather than forcing tog to calculate line offsets during a post-processing step.
Stefan Sperling 7510f233 2020-08-09T20:37:53 simplify resource cleanup upon errors in get_filestream_info()
Stefan Sperling 0dc7faa9 2020-08-09T20:33:12 fix double-free when quitting tog's diff view; found by ofree at /home/stsp/src/got/tog/tog.c:3415 3415 free(s->line_offsets); (gdb) bt msg=0x80e2a4cd87e "chunk is already free %p") at /usr/src/lib/libc/stdlib/malloc.c:300 check=1) at /usr/src/lib/libc/stdlib/malloc.c:1070 clear=0, check=<optimized out>, argsz=0) at /usr/src/lib/libc/stdlib/malloc.c:1431 at /usr/src/lib/libc/stdlib/malloc.c:1488 at /home/stsp/src/got/tog/tog.c:3415 at /home/stsp/src/got/tog/tog.c:518 at /home/stsp/src/got/tog/tog.c:954 at /home/stsp/src/got/tog/tog.c:2728 at /home/stsp/src/got/tog/tog.c:5683 (gdb)
Tracey Emery 369eef86 2020-08-09T17:41:46 fix some memory leaks in tog
Stefan Sperling 528c17dd 2020-07-31T13:01:24 use a more precise regex for color-highlighting 'commit' lines in 'tog log'
Stefan Sperling 0587e10c 2020-07-23T14:21:28 add symlink support to 'got blame' and 'tog blame'
Stefan Sperling 0d6c6ee3 2020-05-20T17:37:29 make 'got/tog tree' show symlink targets like 'ls -lF' does: link@ -> target
Stefan Sperling 0208f208 2020-05-05T09:53:57 show a list of paths changed in a commit with 'got log -P', and in tog requested by matthieu@
Stefan Sperling 79cc719f 2020-04-24T16:31:55 filter out "remote/*/HEAD" references in tog log view