mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-01-06 03:53:59 +02:00
reflog controller
This commit is contained in:
parent
371b8d638b
commit
eab00de273
120
pkg/gui/controllers/reflog_controller.go
Normal file
120
pkg/gui/controllers/reflog_controller.go
Normal file
@ -0,0 +1,120 @@
|
|||||||
|
package controllers
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ReflogController struct {
|
||||||
|
baseController
|
||||||
|
*controllerCommon
|
||||||
|
|
||||||
|
switchToCommitFilesContext SwitchToCommitFilesContextFn
|
||||||
|
}
|
||||||
|
|
||||||
|
var _ types.IController = &ReflogController{}
|
||||||
|
|
||||||
|
func NewReflogController(
|
||||||
|
common *controllerCommon,
|
||||||
|
switchToCommitFilesContext SwitchToCommitFilesContextFn,
|
||||||
|
) *ReflogController {
|
||||||
|
return &ReflogController{
|
||||||
|
baseController: baseController{},
|
||||||
|
controllerCommon: common,
|
||||||
|
switchToCommitFilesContext: switchToCommitFilesContext,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding {
|
||||||
|
bindings := []*types.Binding{
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.GoInto),
|
||||||
|
Handler: self.checkSelected(self.handleViewReflogCommitFiles),
|
||||||
|
Description: self.c.Tr.LcViewCommitFiles,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Universal.Select),
|
||||||
|
Handler: self.checkSelected(self.CheckoutReflogCommit),
|
||||||
|
Description: self.c.Tr.LcCheckoutCommit,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Commits.ViewResetOptions),
|
||||||
|
Handler: self.checkSelected(self.handleCreateReflogResetMenu),
|
||||||
|
Description: self.c.Tr.LcViewResetOptions,
|
||||||
|
OpensMenu: true,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Commits.CherryPickCopy),
|
||||||
|
Handler: opts.Guards.OutsideFilterMode(self.checkSelected(self.handleCopyReflogCommit)),
|
||||||
|
Description: self.c.Tr.LcCherryPickCopy,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange),
|
||||||
|
Handler: opts.Guards.OutsideFilterMode(self.checkSelected(self.handleCopyReflogCommitRange)),
|
||||||
|
Description: self.c.Tr.LcCherryPickCopyRange,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
Key: opts.GetKey(opts.Config.Commits.ResetCherryPick),
|
||||||
|
Handler: self.helpers.CherryPick.Reset,
|
||||||
|
Description: self.c.Tr.LcResetCherryPick,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
return bindings
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) checkSelected(callback func(*models.Commit) error) func() error {
|
||||||
|
return func() error {
|
||||||
|
commit := self.context().GetSelected()
|
||||||
|
if commit == nil {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return callback(commit)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) Context() types.Context {
|
||||||
|
return self.context()
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) context() *context.ReflogCommitsContext {
|
||||||
|
return self.contexts.ReflogCommits
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) CheckoutReflogCommit(commit *models.Commit) error {
|
||||||
|
err := self.c.Ask(types.AskOpts{
|
||||||
|
Title: self.c.Tr.LcCheckoutCommit,
|
||||||
|
Prompt: self.c.Tr.SureCheckoutThisCommit,
|
||||||
|
HandleConfirm: func() error {
|
||||||
|
self.c.LogAction(self.c.Tr.Actions.CheckoutReflogCommit)
|
||||||
|
return self.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{})
|
||||||
|
},
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) handleCreateReflogResetMenu(commit *models.Commit) error {
|
||||||
|
return self.helpers.Refs.CreateGitResetMenu(commit.Sha)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) handleViewReflogCommitFiles(commit *models.Commit) error {
|
||||||
|
return self.switchToCommitFilesContext(SwitchToCommitFilesContextOpts{
|
||||||
|
RefName: commit.Sha,
|
||||||
|
CanRebase: false,
|
||||||
|
Context: self.context(),
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) handleCopyReflogCommit(commit *models.Commit) error {
|
||||||
|
return self.helpers.CherryPick.Copy(commit, self.model.FilteredReflogCommits, self.context())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *ReflogController) handleCopyReflogCommitRange(commit *models.Commit) error {
|
||||||
|
return self.helpers.CherryPick.CopyRange(self.context().GetSelectedLineIdx(), self.model.FilteredReflogCommits, self.context())
|
||||||
|
}
|
@ -534,6 +534,8 @@ func (gui *Gui) resetControllers() {
|
|||||||
|
|
||||||
bisectController := controllers.NewBisectController(common)
|
bisectController := controllers.NewBisectController(common)
|
||||||
|
|
||||||
|
reflogController := controllers.NewReflogController(common, gui.SwitchToCommitFilesContext)
|
||||||
|
|
||||||
gui.Controllers = Controllers{
|
gui.Controllers = Controllers{
|
||||||
Submodules: submodulesController,
|
Submodules: submodulesController,
|
||||||
Global: controllers.NewGlobalController(common),
|
Global: controllers.NewGlobalController(common),
|
||||||
@ -580,6 +582,7 @@ func (gui *Gui) resetControllers() {
|
|||||||
controllers.AttachControllers(gui.State.Contexts.Tags, gui.Controllers.Tags)
|
controllers.AttachControllers(gui.State.Contexts.Tags, gui.Controllers.Tags)
|
||||||
controllers.AttachControllers(gui.State.Contexts.Submodules, gui.Controllers.Submodules)
|
controllers.AttachControllers(gui.State.Contexts.Submodules, gui.Controllers.Submodules)
|
||||||
controllers.AttachControllers(gui.State.Contexts.LocalCommits, gui.Controllers.LocalCommits, bisectController)
|
controllers.AttachControllers(gui.State.Contexts.LocalCommits, gui.Controllers.LocalCommits, bisectController)
|
||||||
|
controllers.AttachControllers(gui.State.Contexts.ReflogCommits, reflogController)
|
||||||
controllers.AttachControllers(gui.State.Contexts.Remotes, gui.Controllers.Remotes)
|
controllers.AttachControllers(gui.State.Contexts.Remotes, gui.Controllers.Remotes)
|
||||||
controllers.AttachControllers(gui.State.Contexts.Menu, gui.Controllers.Menu)
|
controllers.AttachControllers(gui.State.Contexts.Menu, gui.Controllers.Menu)
|
||||||
controllers.AttachControllers(gui.State.Contexts.Global, gui.Controllers.Sync, gui.Controllers.Undo, gui.Controllers.Global)
|
controllers.AttachControllers(gui.State.Contexts.Global, gui.Controllers.Sync, gui.Controllers.Undo, gui.Controllers.Global)
|
||||||
|
@ -424,49 +424,6 @@ func (self *Gui) GetInitialKeybindings() ([]*types.Binding, []*gocui.ViewMouseBi
|
|||||||
Handler: self.helpers.CherryPick.Reset,
|
Handler: self.helpers.CherryPick.Reset,
|
||||||
Description: self.c.Tr.LcResetCherryPick,
|
Description: self.c.Tr.LcResetCherryPick,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.GoInto),
|
|
||||||
Handler: self.handleViewReflogCommitFiles,
|
|
||||||
Description: self.c.Tr.LcViewCommitFiles,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Universal.Select),
|
|
||||||
Handler: self.CheckoutReflogCommit,
|
|
||||||
Description: self.c.Tr.LcCheckoutCommit,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Commits.ViewResetOptions),
|
|
||||||
Handler: self.handleCreateReflogResetMenu,
|
|
||||||
Description: self.c.Tr.LcViewResetOptions,
|
|
||||||
OpensMenu: true,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Commits.CherryPickCopy),
|
|
||||||
Handler: opts.Guards.OutsideFilterMode(self.handleCopyReflogCommit),
|
|
||||||
Description: self.c.Tr.LcCherryPickCopy,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Commits.CherryPickCopyRange),
|
|
||||||
Handler: opts.Guards.OutsideFilterMode(self.handleCopyReflogCommitRange),
|
|
||||||
Description: self.c.Tr.LcCherryPickCopyRange,
|
|
||||||
},
|
|
||||||
{
|
|
||||||
ViewName: "commits",
|
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
|
||||||
Key: opts.GetKey(opts.Config.Commits.ResetCherryPick),
|
|
||||||
Handler: self.helpers.CherryPick.Reset,
|
|
||||||
Description: self.c.Tr.LcResetCherryPick,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
ViewName: "commits",
|
ViewName: "commits",
|
||||||
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
Contexts: []string{string(context.REFLOG_COMMITS_CONTEXT_KEY)},
|
||||||
|
@ -1,12 +1,5 @@
|
|||||||
package gui
|
package gui
|
||||||
|
|
||||||
import (
|
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/controllers"
|
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/types"
|
|
||||||
)
|
|
||||||
|
|
||||||
// list panel functions
|
|
||||||
|
|
||||||
func (gui *Gui) reflogCommitsRenderToMain() error {
|
func (gui *Gui) reflogCommitsRenderToMain() error {
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
||||||
var task updateTask
|
var task updateTask
|
||||||
@ -25,62 +18,3 @@ func (gui *Gui) reflogCommitsRenderToMain() error {
|
|||||||
},
|
},
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gui *Gui) CheckoutReflogCommit() error {
|
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
|
||||||
if commit == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
err := gui.c.Ask(types.AskOpts{
|
|
||||||
Title: gui.c.Tr.LcCheckoutCommit,
|
|
||||||
Prompt: gui.c.Tr.SureCheckoutThisCommit,
|
|
||||||
HandleConfirm: func() error {
|
|
||||||
gui.c.LogAction(gui.c.Tr.Actions.CheckoutReflogCommit)
|
|
||||||
return gui.helpers.Refs.CheckoutRef(commit.Sha, types.CheckoutRefOptions{})
|
|
||||||
},
|
|
||||||
})
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleCreateReflogResetMenu() error {
|
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
|
||||||
|
|
||||||
return gui.helpers.Refs.CreateGitResetMenu(commit.Sha)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleViewReflogCommitFiles() error {
|
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
|
||||||
if commit == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return gui.SwitchToCommitFilesContext(controllers.SwitchToCommitFilesContextOpts{
|
|
||||||
RefName: commit.Sha,
|
|
||||||
CanRebase: false,
|
|
||||||
Context: gui.State.Contexts.ReflogCommits,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleCopyReflogCommit() error {
|
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
|
||||||
if commit == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return gui.helpers.CherryPick.Copy(commit, gui.State.Model.FilteredReflogCommits, gui.State.Contexts.ReflogCommits)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gui *Gui) handleCopyReflogCommitRange() error {
|
|
||||||
// just doing this to ensure something is selected
|
|
||||||
commit := gui.State.Contexts.ReflogCommits.GetSelected()
|
|
||||||
if commit == nil {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
return gui.helpers.CherryPick.CopyRange(gui.State.Contexts.ReflogCommits.GetSelectedLineIdx(), gui.State.Model.FilteredReflogCommits, gui.State.Contexts.ReflogCommits)
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user