Commit 5a8b5076742038c09dece0c1e59ecddf8cd7a41a

Stefan Sperling 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.

diff --git a/tog/tog.c b/tog/tog.c
index 1497322..b61cdb3 100644
--- a/tog/tog.c
+++ b/tog/tog.c
@@ -3607,6 +3607,7 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
 	const struct got_error *err = NULL;
 	struct tog_diff_view_state *s = &view->state.diff;
 	struct tog_log_view_state *ls;
+	struct commit_queue_entry *old_selected_entry;
 	int i;
 
 	switch (ch) {
@@ -3679,11 +3680,15 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
 		if (s->log_view == NULL)
 			break;
 		ls = &s->log_view->state.log;
+		old_selected_entry = ls->selected_entry;
 
 		err = input_log_view(NULL, s->log_view, KEY_UP);
 		if (err)
 			break;
 
+		if (old_selected_entry == ls->selected_entry)
+			break;
+
 		err = set_selected_commit(s, ls->selected_entry);
 		if (err)
 			break;
@@ -3699,11 +3704,15 @@ input_diff_view(struct tog_view **new_view, struct tog_view *view, int ch)
 		if (s->log_view == NULL)
 			break;
 		ls = &s->log_view->state.log;
+		old_selected_entry = ls->selected_entry;
 
 		err = input_log_view(NULL, s->log_view, KEY_DOWN);
 		if (err)
 			break;
 
+		if (old_selected_entry == ls->selected_entry)
+			break;
+
 		err = set_selected_commit(s, ls->selected_entry);
 		if (err)
 			break;