diff options
Diffstat (limited to 'pkg/gui/reflog_panel.go')
-rw-r--r-- | pkg/gui/reflog_panel.go | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/pkg/gui/reflog_panel.go b/pkg/gui/reflog_panel.go new file mode 100644 index 000000000..968325c56 --- /dev/null +++ b/pkg/gui/reflog_panel.go @@ -0,0 +1,76 @@ +package gui + +import ( + "github.com/jesseduffield/gocui" + "github.com/jesseduffield/lazygit/pkg/commands" +) + +// list panel functions + +func (gui *Gui) getSelectedReflogCommit() *commands.Commit { + selectedLine := gui.State.Panels.ReflogCommits.SelectedLine + if selectedLine == -1 || len(gui.State.ReflogCommits) == 0 { + return nil + } + + return gui.State.ReflogCommits[selectedLine] +} + +func (gui *Gui) handleReflogCommitSelect(g *gocui.Gui, v *gocui.View) error { + if gui.popupPanelFocused() { + return nil + } + + gui.State.SplitMainPanel = false + + if _, err := gui.g.SetCurrentView(v.Name()); err != nil { + return err + } + + gui.getMainView().Title = "Reflog Entry" + + commit := gui.getSelectedReflogCommit() + if commit == nil { + return gui.renderString(g, "main", "No reflog history") + } + if err := gui.focusPoint(0, gui.State.Panels.ReflogCommits.SelectedLine, len(gui.State.ReflogCommits), v); err != nil { + return err + } + + commitText, err := gui.GitCommand.Show(commit.Sha) + if err != nil { + return err + } + return gui.renderString(g, "main", commitText) +} + +func (gui *Gui) refreshReflogCommits() error { + commits, err := gui.GitCommand.GetReflogCommits() + if err != nil { + return gui.createErrorPanel(gui.g, err.Error()) + } + + gui.State.ReflogCommits = commits + + if gui.getCommitsView().Context == "reflog-commits" { + return gui.renderReflogCommitsWithSelection() + } + + return nil +} + +func (gui *Gui) renderReflogCommitsWithSelection() error { + commitsView := gui.getCommitsView() + + gui.refreshSelectedLine(&gui.State.Panels.ReflogCommits.SelectedLine, len(gui.State.ReflogCommits)) + if err := gui.renderListPanel(commitsView, gui.State.ReflogCommits); err != nil { + return err + } + if gui.g.CurrentView() == commitsView && commitsView.Context == "reflog-commits" { + if err := gui.handleReflogCommitSelect(gui.g, commitsView); err != nil { + return err + } + } + + return nil +} |