Skip to content

Commit 49cd7ea

Browse files
cruesslerextrawurst
authored andcommitted
Fix file history for sizes <= 1200 entries
1 parent 9b09617 commit 49cd7ea

File tree

1 file changed

+28
-4
lines changed

1 file changed

+28
-4
lines changed

src/components/file_revlog.rs

Lines changed: 28 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -226,16 +226,40 @@ impl FileRevlogComponent {
226226
if let Some(git_log) = &mut self.git_log {
227227
let table_state = self.table_state.take();
228228

229-
let start = table_state.selected().unwrap_or(0);
230-
231229
let commits = get_commits_info(
232230
&self.repo_path.borrow(),
233-
&git_log.get_slice(start, SLICE_SIZE)?,
231+
&git_log.get_slice(0, SLICE_SIZE)?,
234232
self.current_width.get(),
235233
);
236234

237235
if let Ok(commits) = commits {
238-
self.items.set_items(start, commits);
236+
// 2023-04-12
237+
//
238+
// There is an issue with how windowing works in `self.items` and
239+
// `self.table_state`. Because of that issue, we currently have to pass
240+
// `0` as the first argument to `set_items`. If we did not do that, the
241+
// offset that is kept separately in `self.items` and `self.table_state`
242+
// would get out of sync, resulting in the table showing the wrong rows.
243+
//
244+
// The offset determines the number of rows `render_stateful_widget`
245+
// skips when rendering a table. When `set_items` is called, it clears
246+
// its internal `Vec` of items and sets `index_offset` based on the
247+
// parameter passed. Unfortunately, there is no way for us to pass this
248+
// information, `index_offset`, to `render_stateful_widget`. Because of
249+
// that, `render_stateful_widget` assumes that the rows provided by
250+
// `Table` are 0-indexed while in reality they are
251+
// `index_offset`-indexed.
252+
//
253+
// This fix makes the `FileRevlog` unable to show histories that have
254+
// more than `SLICE_SIZE` items, but since it is broken for larger
255+
// histories anyway, this seems acceptable for the time being.
256+
//
257+
// This issue can only properly be fixed upstream, in `tui-rs`. See
258+
// [tui-issue].
259+
//
260+
// [gitui-issue]: https://github.com/extrawurst/gitui/issues/1560
261+
// [tui-issue]: https://github.com/fdehau/tui-rs/issues/626
262+
self.items.set_items(0, commits);
239263
}
240264

241265
self.table_state.set(table_state);

0 commit comments

Comments
 (0)