github.com/andrewrech/lazygit@v0.8.1/pkg/gui/commit_files_panel.go (about) 1 package gui 2 3 import ( 4 "github.com/jesseduffield/gocui" 5 "github.com/jesseduffield/lazygit/pkg/commands" 6 ) 7 8 func (gui *Gui) getSelectedCommitFile(g *gocui.Gui) *commands.CommitFile { 9 selectedLine := gui.State.Panels.CommitFiles.SelectedLine 10 if selectedLine == -1 { 11 return nil 12 } 13 14 return gui.State.CommitFiles[selectedLine] 15 } 16 17 func (gui *Gui) handleCommitFileSelect(g *gocui.Gui, v *gocui.View) error { 18 commitFile := gui.getSelectedCommitFile(g) 19 if commitFile == nil { 20 return gui.renderString(g, "commitFiles", gui.Tr.SLocalize("NoCommiteFiles")) 21 } 22 23 if err := gui.focusPoint(0, gui.State.Panels.CommitFiles.SelectedLine, len(gui.State.CommitFiles), v); err != nil { 24 return err 25 } 26 commitText, err := gui.GitCommand.ShowCommitFile(commitFile.Sha, commitFile.Name) 27 if err != nil { 28 return err 29 } 30 return gui.renderString(g, "main", commitText) 31 } 32 33 func (gui *Gui) handleCommitFilesNextLine(g *gocui.Gui, v *gocui.View) error { 34 panelState := gui.State.Panels.CommitFiles 35 gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), false) 36 37 return gui.handleCommitFileSelect(gui.g, v) 38 } 39 40 func (gui *Gui) handleCommitFilesPrevLine(g *gocui.Gui, v *gocui.View) error { 41 panelState := gui.State.Panels.CommitFiles 42 gui.changeSelectedLine(&panelState.SelectedLine, len(gui.State.CommitFiles), true) 43 44 return gui.handleCommitFileSelect(gui.g, v) 45 } 46 47 func (gui *Gui) handleSwitchToCommitsPanel(g *gocui.Gui, v *gocui.View) error { 48 commitsView, err := g.View("commits") 49 if err != nil { 50 return err 51 } 52 return gui.switchFocus(g, v, commitsView) 53 } 54 55 func (gui *Gui) handleCheckoutCommitFile(g *gocui.Gui, v *gocui.View) error { 56 file := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine] 57 58 if err := gui.GitCommand.CheckoutFile(file.Sha, file.Name); err != nil { 59 return gui.createErrorPanel(gui.g, err.Error()) 60 } 61 62 return gui.refreshFiles() 63 } 64 65 func (gui *Gui) handleDiscardOldFileChange(g *gocui.Gui, v *gocui.View) error { 66 fileName := gui.State.CommitFiles[gui.State.Panels.CommitFiles.SelectedLine].Name 67 68 return gui.createConfirmationPanel(gui.g, v, gui.Tr.SLocalize("DiscardFileChangesTitle"), gui.Tr.SLocalize("DiscardFileChangesPrompt"), func(g *gocui.Gui, v *gocui.View) error { 69 return gui.WithWaitingStatus(gui.Tr.SLocalize("RebasingStatus"), func() error { 70 if err := gui.GitCommand.DiscardOldFileChanges(gui.State.Commits, gui.State.Panels.Commits.SelectedLine, fileName); err != nil { 71 if err := gui.handleGenericMergeCommandResult(err); err != nil { 72 return err 73 } 74 } 75 76 return gui.refreshSidePanels(gui.g) 77 }) 78 }, nil) 79 } 80 81 func (gui *Gui) refreshCommitFilesView() error { 82 commit := gui.getSelectedCommit(gui.g) 83 if commit == nil { 84 return nil 85 } 86 87 files, err := gui.GitCommand.GetCommitFiles(commit.Sha) 88 if err != nil { 89 return gui.createErrorPanel(gui.g, err.Error()) 90 } 91 92 gui.State.CommitFiles = files 93 94 gui.refreshSelectedLine(&gui.State.Panels.CommitFiles.SelectedLine, len(gui.State.CommitFiles)) 95 96 if err := gui.renderListPanel(gui.getCommitFilesView(), gui.State.CommitFiles); err != nil { 97 return err 98 } 99 100 return gui.handleCommitFileSelect(gui.g, gui.getCommitFilesView()) 101 } 102 103 func (gui *Gui) handleOpenOldCommitFile(g *gocui.Gui, v *gocui.View) error { 104 file := gui.getSelectedCommitFile(g) 105 return gui.openFile(file.Name) 106 }