1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-01 00:54:58 +02:00

standardise getting selected item

This commit is contained in:
Jesse Duffield
2020-08-16 17:45:12 +10:00
parent c9ae54a8c8
commit ed4574bda9
7 changed files with 67 additions and 88 deletions

View File

@ -46,17 +46,11 @@ func (gui *Gui) currentDiffTerminals() []string {
names := []string{} names := []string{}
switch currentView.Name() { switch currentView.Name() {
case "files": case "files":
// not supporting files for now // not supporting files for now
// file, err := gui.getSelectedFile()
// if err == nil {
// names = append(names, file.Name)
// }
case "commitFiles": case "commitFiles":
// not supporting commit files for now // not supporting commit files for now
// file := gui.getSelectedCommitFile()
// if file != nil {
// names = append(names, file.Name)
// }
case "commits": case "commits":
var commit *commands.Commit var commit *commands.Commit
switch gui.getCommitsView().Context { switch gui.getCommitsView().Context {

View File

@ -5,11 +5,8 @@ import (
) )
func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleCreateDiscardMenu(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err != gui.Errors.ErrNoFiles {
return err
}
return nil return nil
} }

View File

@ -19,13 +19,13 @@ import (
// list panel functions // list panel functions
func (gui *Gui) getSelectedFile() (*commands.File, error) { func (gui *Gui) getSelectedFile() *commands.File {
selectedLine := gui.State.Panels.Files.SelectedLine selectedLine := gui.State.Panels.Files.SelectedLine
if selectedLine == -1 { if selectedLine == -1 {
return &commands.File{}, gui.Errors.ErrNoFiles return &commands.File{}
} }
return gui.State.Files[selectedLine], nil return gui.State.Files[selectedLine]
} }
func (gui *Gui) selectFile(alreadySelected bool) error { func (gui *Gui) selectFile(alreadySelected bool) error {
@ -35,11 +35,8 @@ func (gui *Gui) selectFile(alreadySelected bool) error {
return gui.renderDiff() return gui.renderDiff()
} }
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err != gui.Errors.ErrNoFiles {
return err
}
gui.State.SplitMainPanel = false gui.State.SplitMainPanel = false
gui.getMainView().Title = "" gui.getMainView().Title = ""
return gui.newStringTask("main", gui.Tr.SLocalize("NoChangedFiles")) return gui.newStringTask("main", gui.Tr.SLocalize("NoChangedFiles"))
@ -95,7 +92,7 @@ func (gui *Gui) refreshFiles() error {
gui.State.RefreshingFilesMutex.Unlock() gui.State.RefreshingFilesMutex.Unlock()
}() }()
selectedFile, _ := gui.getSelectedFile() selectedFile := gui.getSelectedFile()
filesView := gui.getFilesView() filesView := gui.getFilesView()
if filesView == nil { if filesView == nil {
@ -111,8 +108,8 @@ func (gui *Gui) refreshFiles() error {
gui.renderDisplayStrings(filesView, displayStrings) gui.renderDisplayStrings(filesView, displayStrings)
if g.CurrentView() == filesView || (g.CurrentView() == gui.getMainView() && g.CurrentView().Context == "merging") { if g.CurrentView() == filesView || (g.CurrentView() == gui.getMainView() && g.CurrentView().Context == "merging") {
newSelectedFile, _ := gui.getSelectedFile() newSelectedFile := gui.getSelectedFile()
alreadySelected := newSelectedFile.Name == selectedFile.Name alreadySelected := selectedFile != nil && newSelectedFile != nil && newSelectedFile.Name == selectedFile.Name
return gui.selectFile(alreadySelected) return gui.selectFile(alreadySelected)
} }
return nil return nil
@ -146,10 +143,11 @@ func (gui *Gui) trackedFiles() []*commands.File {
} }
func (gui *Gui) stageSelectedFile(g *gocui.Gui) error { func (gui *Gui) stageSelectedFile(g *gocui.Gui) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return err return nil
} }
return gui.GitCommand.StageFile(file.Name) return gui.GitCommand.StageFile(file.Name)
} }
@ -158,13 +156,11 @@ func (gui *Gui) handleEnterFile(g *gocui.Gui, v *gocui.View) error {
} }
func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error { func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err != gui.Errors.ErrNoFiles {
return err
}
return nil return nil
} }
if file.HasInlineMergeConflicts { if file.HasInlineMergeConflicts {
return gui.handleSwitchToMerge() return gui.handleSwitchToMerge()
} }
@ -178,12 +174,9 @@ func (gui *Gui) enterFile(forceSecondaryFocused bool, selectedLineIdx int) error
} }
func (gui *Gui) handleFilePress() error { func (gui *Gui) handleFilePress() error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err == gui.Errors.ErrNoFiles { return nil
return nil
}
return err
} }
if file.HasInlineMergeConflicts { if file.HasInlineMergeConflicts {
@ -191,12 +184,13 @@ func (gui *Gui) handleFilePress() error {
} }
if file.HasUnstagedChanges { if file.HasUnstagedChanges {
err = gui.GitCommand.StageFile(file.Name) if err := gui.GitCommand.StageFile(file.Name); err != nil {
return gui.surfaceError(err)
}
} else { } else {
err = gui.GitCommand.UnStageFile(file.Name, file.Tracked) if err := gui.GitCommand.UnStageFile(file.Name, file.Tracked); err != nil {
} return gui.surfaceError(err)
if err != nil { }
return gui.surfaceError(err)
} }
if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil { if err := gui.refreshSidePanels(refreshOptions{scope: []int{FILES}}); err != nil {
@ -242,9 +236,9 @@ func (gui *Gui) handleStageAll(g *gocui.Gui, v *gocui.View) error {
} }
func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleIgnoreFile(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return gui.surfaceError(err) return nil
} }
if file.Tracked { if file.Tracked {
@ -395,18 +389,18 @@ func (gui *Gui) editFile(filename string) error {
} }
func (gui *Gui) handleFileEdit(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleFileEdit(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return gui.surfaceError(err) return nil
} }
return gui.editFile(file.Name) return gui.editFile(file.Name)
} }
func (gui *Gui) handleFileOpen(g *gocui.Gui, v *gocui.View) error { func (gui *Gui) handleFileOpen(g *gocui.Gui, v *gocui.View) error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return gui.surfaceError(err) return nil
} }
return gui.openFile(file.Name) return gui.openFile(file.Name)
} }
@ -419,7 +413,7 @@ func (gui *Gui) refreshStateFiles() error {
// keep track of where the cursor is currently and the current file names // keep track of where the cursor is currently and the current file names
// when we refresh, go looking for a matching name // when we refresh, go looking for a matching name
// move the cursor to there. // move the cursor to there.
selectedFile, _ := gui.getSelectedFile() selectedFile := gui.getSelectedFile()
// get files to stage // get files to stage
files := gui.GitCommand.GetStatusFiles(commands.GetStatusFileOptions{}) files := gui.GitCommand.GetStatusFiles(commands.GetStatusFileOptions{})
@ -581,13 +575,11 @@ func (gui *Gui) pushFiles(g *gocui.Gui, v *gocui.View) error {
} }
func (gui *Gui) handleSwitchToMerge() error { func (gui *Gui) handleSwitchToMerge() error {
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err != gui.Errors.ErrNoFiles {
return gui.surfaceError(err)
}
return nil return nil
} }
if !file.HasInlineMergeConflicts { if !file.HasInlineMergeConflicts {
return gui.createErrorPanel(gui.Tr.SLocalize("FileNoMergeCons")) return gui.createErrorPanel(gui.Tr.SLocalize("FileNoMergeCons"))
} }

View File

@ -15,8 +15,8 @@ func (gui *Gui) handleCreateFilteringMenuPanel(g *gocui.Gui, v *gocui.View) erro
fileName := "" fileName := ""
switch v.Name() { switch v.Name() {
case "files": case "files":
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err == nil { if file != nil {
fileName = file.Name fileName = file.Name
} }
case "commitFiles": case "commitFiles":

View File

@ -336,8 +336,8 @@ func (gui *Gui) handleOpenFileAtLine() error {
case "patch-building": case "patch-building":
filename = gui.getSelectedCommitFileName() filename = gui.getSelectedCommitFileName()
case "staging": case "staging":
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return nil return nil
} }
filename = file.Name filename = file.Name

View File

@ -113,9 +113,9 @@ func (gui *Gui) isIndexToDelete(i int, conflict commands.Conflict, pick string)
} }
func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error { func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
gitFile, err := gui.getSelectedFile() gitFile := gui.getSelectedFile()
if err != nil { if gitFile == nil {
return err return nil
} }
file, err := os.Open(gitFile.Name) file, err := os.Open(gitFile.Name)
if err != nil { if err != nil {
@ -139,9 +139,9 @@ func (gui *Gui) resolveConflict(conflict commands.Conflict, pick string) error {
} }
func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error { func (gui *Gui) pushFileSnapshot(g *gocui.Gui) error {
gitFile, err := gui.getSelectedFile() gitFile := gui.getSelectedFile()
if err != nil { if gitFile == nil {
return err return nil
} }
content, err := gui.GitCommand.CatFile(gitFile.Name) content, err := gui.GitCommand.CatFile(gitFile.Name)
if err != nil { if err != nil {
@ -156,9 +156,9 @@ func (gui *Gui) handlePopFileSnapshot(g *gocui.Gui, v *gocui.View) error {
return nil return nil
} }
prevContent := gui.State.Panels.Merging.EditHistory.Pop().(string) prevContent := gui.State.Panels.Merging.EditHistory.Pop().(string)
gitFile, err := gui.getSelectedFile() gitFile := gui.getSelectedFile()
if err != nil { if gitFile == nil {
return err return nil
} }
if err := ioutil.WriteFile(gitFile.Name, []byte(prevContent), 0644); err != nil { if err := ioutil.WriteFile(gitFile.Name, []byte(prevContent), 0644); err != nil {
return err return err
@ -249,16 +249,15 @@ func (gui *Gui) refreshMergePanel() error {
} }
func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) { func (gui *Gui) catSelectedFile(g *gocui.Gui) (string, error) {
item, err := gui.getSelectedFile() item := gui.getSelectedFile()
if err != nil { if item == nil {
if err != gui.Errors.ErrNoFiles {
return "", err
}
return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay")) return "", gui.newStringTask("main", gui.Tr.SLocalize("NoFilesDisplay"))
} }
if item.Type != "file" { if item.Type != "file" {
return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile")) return "", gui.newStringTask("main", gui.Tr.SLocalize("NotAFile"))
} }
cat, err := gui.GitCommand.CatFile(item.Name) cat, err := gui.GitCommand.CatFile(item.Name)
if err != nil { if err != nil {
gui.Log.Error(err) gui.Log.Error(err)
@ -353,8 +352,8 @@ func (gui *Gui) canScrollMergePanel() bool {
return false return false
} }
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return false return false
} }

View File

@ -19,11 +19,8 @@ func (gui *Gui) refreshStagingPanel(forceSecondaryFocused bool, selectedLineIdx
// return err // return err
// } // }
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
if err != gui.Errors.ErrNoFiles {
return err
}
return gui.handleStagingEscape() return gui.handleStagingEscape()
} }
@ -131,9 +128,9 @@ func (gui *Gui) handleResetSelection(g *gocui.Gui, v *gocui.View) error {
func (gui *Gui) applySelection(reverse bool) error { func (gui *Gui) applySelection(reverse bool) error {
state := gui.State.Panels.LineByLine state := gui.State.Panels.LineByLine
file, err := gui.getSelectedFile() file := gui.getSelectedFile()
if err != nil { if file == nil {
return err return nil
} }
patch := patch.ModifiedPatchForRange(gui.Log, file.Name, state.Diff, state.FirstLineIdx, state.LastLineIdx, reverse, false) patch := patch.ModifiedPatchForRange(gui.Log, file.Name, state.Diff, state.FirstLineIdx, state.LastLineIdx, reverse, false)
@ -148,7 +145,7 @@ func (gui *Gui) applySelection(reverse bool) error {
if !reverse || state.SecondaryFocused { if !reverse || state.SecondaryFocused {
applyFlags = append(applyFlags, "cached") applyFlags = append(applyFlags, "cached")
} }
err = gui.GitCommand.ApplyPatch(patch, applyFlags...) err := gui.GitCommand.ApplyPatch(patch, applyFlags...)
if err != nil { if err != nil {
return gui.surfaceError(err) return gui.surfaceError(err)
} }