1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2024-12-12 11:15:00 +02:00
lazygit/pkg/gui/stash_panel.go
Jesse Duffield 91fe68576c refactor
2022-01-07 10:52:51 +11:00

140 lines
3.2 KiB
Go

package gui
import (
"github.com/jesseduffield/lazygit/pkg/commands/loaders"
"github.com/jesseduffield/lazygit/pkg/commands/models"
"github.com/jesseduffield/lazygit/pkg/utils"
)
// list panel functions
func (gui *Gui) getSelectedStashEntry() *models.StashEntry {
selectedLine := gui.State.Panels.Stash.SelectedLineIdx
if selectedLine == -1 {
return nil
}
return gui.State.StashEntries[selectedLine]
}
func (gui *Gui) stashRenderToMain() error {
var task updateTask
stashEntry := gui.getSelectedStashEntry()
if stashEntry == nil {
task = NewRenderStringTask(gui.Tr.NoStashEntries)
} else {
task = NewRunPtyTask(gui.GitCommand.ShowStashEntryCmdObj(stashEntry.Index).GetCmd())
}
return gui.refreshMainViews(refreshMainOpts{
main: &viewUpdateOpts{
title: "Stash",
task: task,
},
})
}
func (gui *Gui) refreshStashEntries() error {
gui.State.StashEntries = loaders.
NewStashLoader(gui.Common, gui.GitCommand.Cmd).
GetStashEntries(gui.State.Modes.Filtering.GetPath())
return gui.State.Contexts.Stash.HandleRender()
}
// specific functions
func (gui *Gui) handleStashApply() error {
skipStashWarning := gui.UserConfig.Gui.SkipStashWarning
apply := func() error {
return gui.stashDo("apply")
}
if skipStashWarning {
return apply()
}
return gui.ask(askOpts{
title: gui.Tr.StashApply,
prompt: gui.Tr.SureApplyStashEntry,
handleConfirm: func() error {
return apply()
},
})
}
func (gui *Gui) handleStashPop() error {
skipStashWarning := gui.UserConfig.Gui.SkipStashWarning
pop := func() error {
return gui.stashDo("pop")
}
if skipStashWarning {
return pop()
}
return gui.ask(askOpts{
title: gui.Tr.StashPop,
prompt: gui.Tr.SurePopStashEntry,
handleConfirm: func() error {
return pop()
},
})
}
func (gui *Gui) handleStashDrop() error {
return gui.ask(askOpts{
title: gui.Tr.StashDrop,
prompt: gui.Tr.SureDropStashEntry,
handleConfirm: func() error {
return gui.stashDo("drop")
},
})
}
func (gui *Gui) stashDo(method string) error {
stashEntry := gui.getSelectedStashEntry()
if stashEntry == nil {
errorMessage := utils.ResolvePlaceholderString(
gui.Tr.NoStashTo,
map[string]string{
"method": method,
},
)
return gui.createErrorPanel(errorMessage)
}
gui.logAction(gui.Tr.Actions.Stash)
if err := gui.GitCommand.StashDo(stashEntry.Index, method); err != nil {
return gui.surfaceError(err)
}
return gui.refreshSidePanels(refreshOptions{scope: []RefreshableView{STASH, FILES}})
}
func (gui *Gui) handleStashSave(stashFunc func(message string) error) error {
if len(gui.trackedFiles()) == 0 && len(gui.stagedFiles()) == 0 {
return gui.createErrorPanel(gui.Tr.NoTrackedStagedFilesStash)
}
return gui.prompt(promptOpts{
title: gui.Tr.StashChanges,
handleConfirm: func(stashComment string) error {
if err := stashFunc(stashComment); err != nil {
return gui.surfaceError(err)
}
return gui.refreshSidePanels(refreshOptions{scope: []RefreshableView{STASH, FILES}})
},
})
}
func (gui *Gui) handleViewStashFiles() error {
stashEntry := gui.getSelectedStashEntry()
if stashEntry == nil {
return nil
}
return gui.switchToCommitFilesContext(stashEntry.RefName(), false, gui.State.Contexts.Stash, "stash")
}