mirror of
https://github.com/jesseduffield/lazygit.git
synced 2024-12-12 11:15:00 +02:00
149 lines
3.3 KiB
Go
149 lines
3.3 KiB
Go
package gui
|
|
|
|
import (
|
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
|
)
|
|
|
|
// 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.Git.Stash.ShowStashEntryCmdObj(stashEntry.Index).GetCmd())
|
|
}
|
|
|
|
return gui.refreshMainViews(refreshMainOpts{
|
|
main: &viewUpdateOpts{
|
|
title: "Stash",
|
|
task: task,
|
|
},
|
|
})
|
|
}
|
|
|
|
func (gui *Gui) refreshStashEntries() error {
|
|
gui.State.StashEntries = gui.Git.Loaders.Stash.
|
|
GetStashEntries(gui.State.Modes.Filtering.GetPath())
|
|
|
|
return gui.State.Contexts.Stash.HandleRender()
|
|
}
|
|
|
|
// specific functions
|
|
|
|
func (gui *Gui) handleStashApply() error {
|
|
stashEntry := gui.getSelectedStashEntry()
|
|
if stashEntry == nil {
|
|
return nil
|
|
}
|
|
|
|
skipStashWarning := gui.UserConfig.Gui.SkipStashWarning
|
|
|
|
apply := func() error {
|
|
gui.logAction(gui.Tr.Actions.Stash)
|
|
if err := gui.Git.Stash.Apply(stashEntry.Index); err != nil {
|
|
return gui.surfaceError(err)
|
|
}
|
|
return gui.postStashRefresh()
|
|
}
|
|
|
|
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 {
|
|
stashEntry := gui.getSelectedStashEntry()
|
|
if stashEntry == nil {
|
|
return nil
|
|
}
|
|
|
|
skipStashWarning := gui.UserConfig.Gui.SkipStashWarning
|
|
|
|
pop := func() error {
|
|
gui.logAction(gui.Tr.Actions.Stash)
|
|
if err := gui.Git.Stash.Pop(stashEntry.Index); err != nil {
|
|
return gui.surfaceError(err)
|
|
}
|
|
return gui.postStashRefresh()
|
|
}
|
|
|
|
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 {
|
|
stashEntry := gui.getSelectedStashEntry()
|
|
if stashEntry == nil {
|
|
return nil
|
|
}
|
|
|
|
return gui.ask(askOpts{
|
|
title: gui.Tr.StashDrop,
|
|
prompt: gui.Tr.SureDropStashEntry,
|
|
handleConfirm: func() error {
|
|
gui.logAction(gui.Tr.Actions.Stash)
|
|
if err := gui.Git.Stash.Drop(stashEntry.Index); err != nil {
|
|
return gui.surfaceError(err)
|
|
}
|
|
return gui.postStashRefresh()
|
|
},
|
|
})
|
|
}
|
|
|
|
func (gui *Gui) postStashRefresh() error {
|
|
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")
|
|
}
|