1
0
mirror of https://github.com/jesseduffield/lazygit.git synced 2025-07-30 03:23:08 +03:00

no more indirection

This commit is contained in:
Jesse Duffield
2022-01-31 22:20:28 +11:00
parent 2a1e3faa0c
commit 2db4636815
11 changed files with 142 additions and 147 deletions

View File

@ -32,8 +32,8 @@ func (gui *Gui) allContexts() []types.Context {
} }
} }
func (gui *Gui) contextTree() context.ContextTree { func (gui *Gui) contextTree() *context.ContextTree {
return context.ContextTree{ return &context.ContextTree{
Status: NewSimpleContext( Status: NewSimpleContext(
context.NewBaseContext(context.NewBaseContextOpts{ context.NewBaseContext(context.NewBaseContextOpts{
Kind: types.SIDE_CONTEXT, Kind: types.SIDE_CONTEXT,

View File

@ -13,7 +13,7 @@ import (
type BisectController struct { type BisectController struct {
c *types.ControllerCommon c *types.ControllerCommon
getContext func() types.IListContext context types.IListContext
git *commands.GitCommand git *commands.GitCommand
bisectHelper *BisectHelper bisectHelper *BisectHelper
@ -25,7 +25,7 @@ var _ types.IController = &BisectController{}
func NewBisectController( func NewBisectController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() types.IListContext, context types.IListContext,
git *commands.GitCommand, git *commands.GitCommand,
bisectHelper *BisectHelper, bisectHelper *BisectHelper,
@ -34,7 +34,7 @@ func NewBisectController(
) *BisectController { ) *BisectController {
return &BisectController{ return &BisectController{
c: c, c: c,
getContext: getContext, context: context,
git: git, git: git,
bisectHelper: bisectHelper, bisectHelper: bisectHelper,
@ -232,8 +232,8 @@ func (self *BisectController) selectCurrentBisectCommit() {
// find index of commit with that sha, move cursor to that. // find index of commit with that sha, move cursor to that.
for i, commit := range self.getCommits() { for i, commit := range self.getCommits() {
if commit.Sha == info.GetCurrentSha() { if commit.Sha == info.GetCurrentSha() {
self.getContext().GetPanelState().SetSelectedLineIdx(i) self.context.GetPanelState().SetSelectedLineIdx(i)
_ = self.getContext().HandleFocus() _ = self.context.HandleFocus()
break break
} }
} }
@ -252,5 +252,5 @@ func (self *BisectController) checkSelected(callback func(*models.Commit) error)
} }
func (self *BisectController) Context() types.Context { func (self *BisectController) Context() types.Context {
return self.getContext() return self.context
} }

View File

@ -13,8 +13,8 @@ type CherryPickHelper struct {
git *commands.GitCommand git *commands.GitCommand
getContexts func() context.ContextTree contexts *context.ContextTree
getData func() *cherrypicking.CherryPicking getData func() *cherrypicking.CherryPicking
rebaseHelper *RebaseHelper rebaseHelper *RebaseHelper
} }
@ -25,14 +25,14 @@ type CherryPickHelper struct {
func NewCherryPickHelper( func NewCherryPickHelper(
c *types.ControllerCommon, c *types.ControllerCommon,
git *commands.GitCommand, git *commands.GitCommand,
getContexts func() context.ContextTree, contexts *context.ContextTree,
getData func() *cherrypicking.CherryPicking, getData func() *cherrypicking.CherryPicking,
rebaseHelper *RebaseHelper, rebaseHelper *RebaseHelper,
) *CherryPickHelper { ) *CherryPickHelper {
return &CherryPickHelper{ return &CherryPickHelper{
c: c, c: c,
git: git, git: git,
getContexts: getContexts, contexts: contexts,
getData: getData, getData: getData,
rebaseHelper: rebaseHelper, rebaseHelper: rebaseHelper,
} }
@ -143,9 +143,9 @@ func (self *CherryPickHelper) resetIfNecessary(context types.Context) error {
func (self *CherryPickHelper) rerender() error { func (self *CherryPickHelper) rerender() error {
for _, context := range []types.Context{ for _, context := range []types.Context{
self.getContexts().BranchCommits, self.contexts.BranchCommits,
self.getContexts().ReflogCommits, self.contexts.ReflogCommits,
self.getContexts().SubCommits, self.contexts.SubCommits,
} { } {
if err := self.c.PostRefreshUpdate(context); err != nil { if err := self.c.PostRefreshUpdate(context); err != nil {
return err return err

View File

@ -21,21 +21,20 @@ type FilesController struct {
// case I would actually prefer a _zero_ letter variable name in the form of // case I would actually prefer a _zero_ letter variable name in the form of
// struct embedding, but Go does not allow hiding public fields in an embedded struct // struct embedding, but Go does not allow hiding public fields in an embedded struct
// to the client // to the client
c *types.ControllerCommon c *types.ControllerCommon
getContext func() *context.WorkingTreeContext context *context.WorkingTreeContext
getFiles func() []*models.File model *types.Model
git *commands.GitCommand git *commands.GitCommand
os *oscommands.OSCommand os *oscommands.OSCommand
getSelectedFileNode func() *filetree.FileNode getSelectedFileNode func() *filetree.FileNode
getContexts func() context.ContextTree contexts *context.ContextTree
enterSubmodule func(submodule *models.SubmoduleConfig) error enterSubmodule func(submodule *models.SubmoduleConfig) error
getSubmodules func() []*models.SubmoduleConfig getSubmodules func() []*models.SubmoduleConfig
setCommitMessage func(message string) setCommitMessage func(message string)
getCheckedOutBranch func() *models.Branch getCheckedOutBranch func() *models.Branch
withGpgHandling func(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error withGpgHandling func(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error
getFailedCommitMessage func() string getFailedCommitMessage func() string
getCommits func() []*models.Commit
getSelectedPath func() string getSelectedPath func() string
switchToMergeFn func(path string) error switchToMergeFn func(path string) error
suggestionsHelper ISuggestionsHelper suggestionsHelper ISuggestionsHelper
@ -48,18 +47,17 @@ var _ types.IController = &FilesController{}
func NewFilesController( func NewFilesController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() *context.WorkingTreeContext, context *context.WorkingTreeContext,
getFiles func() []*models.File, model *types.Model,
git *commands.GitCommand, git *commands.GitCommand,
os *oscommands.OSCommand, os *oscommands.OSCommand,
getSelectedFileNode func() *filetree.FileNode, getSelectedFileNode func() *filetree.FileNode,
allContexts func() context.ContextTree, allContexts *context.ContextTree,
enterSubmodule func(submodule *models.SubmoduleConfig) error, enterSubmodule func(submodule *models.SubmoduleConfig) error,
getSubmodules func() []*models.SubmoduleConfig, getSubmodules func() []*models.SubmoduleConfig,
setCommitMessage func(message string), setCommitMessage func(message string),
withGpgHandling func(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error, withGpgHandling func(cmdObj oscommands.ICmdObj, waitingStatus string, onSuccess func() error) error,
getFailedCommitMessage func() string, getFailedCommitMessage func() string,
getCommits func() []*models.Commit,
getSelectedPath func() string, getSelectedPath func() string,
switchToMergeFn func(path string) error, switchToMergeFn func(path string) error,
suggestionsHelper ISuggestionsHelper, suggestionsHelper ISuggestionsHelper,
@ -69,18 +67,17 @@ func NewFilesController(
) *FilesController { ) *FilesController {
return &FilesController{ return &FilesController{
c: c, c: c,
getContext: getContext, context: context,
getFiles: getFiles, model: model,
git: git, git: git,
os: os, os: os,
getSelectedFileNode: getSelectedFileNode, getSelectedFileNode: getSelectedFileNode,
getContexts: allContexts, contexts: allContexts,
enterSubmodule: enterSubmodule, enterSubmodule: enterSubmodule,
getSubmodules: getSubmodules, getSubmodules: getSubmodules,
setCommitMessage: setCommitMessage, setCommitMessage: setCommitMessage,
withGpgHandling: withGpgHandling, withGpgHandling: withGpgHandling,
getFailedCommitMessage: getFailedCommitMessage, getFailedCommitMessage: getFailedCommitMessage,
getCommits: getCommits,
getSelectedPath: getSelectedPath, getSelectedPath: getSelectedPath,
switchToMergeFn: switchToMergeFn, switchToMergeFn: switchToMergeFn,
suggestionsHelper: suggestionsHelper, suggestionsHelper: suggestionsHelper,
@ -99,7 +96,7 @@ func (self *FilesController) Keybindings(getKey func(key string) interface{}, co
}, },
{ {
Key: gocui.MouseLeft, Key: gocui.MouseLeft,
Handler: func() error { return self.getContext().HandleClick(self.checkSelectedFileNode(self.press)) }, Handler: func() error { return self.context.HandleClick(self.checkSelectedFileNode(self.press)) },
}, },
{ {
Key: getKey("<c-b>"), // TODO: softcode Key: getKey("<c-b>"), // TODO: softcode
@ -198,7 +195,7 @@ func (self *FilesController) Keybindings(getKey func(key string) interface{}, co
}, },
} }
return append(bindings, self.getContext().Keybindings(getKey, config, guards)...) return append(bindings, self.context.Keybindings(getKey, config, guards)...)
} }
func (self *FilesController) press(node *filetree.FileNode) error { func (self *FilesController) press(node *filetree.FileNode) error {
@ -206,7 +203,7 @@ func (self *FilesController) press(node *filetree.FileNode) error {
file := node.File file := node.File
if file.HasInlineMergeConflicts { if file.HasInlineMergeConflicts {
return self.c.PushContext(self.getContexts().Merging) return self.c.PushContext(self.contexts.Merging)
} }
if file.HasUnstagedChanges { if file.HasUnstagedChanges {
@ -245,7 +242,7 @@ func (self *FilesController) press(node *filetree.FileNode) error {
return err return err
} }
return self.getContext().HandleFocus() return self.context.HandleFocus()
} }
func (self *FilesController) checkSelectedFileNode(callback func(*filetree.FileNode) error) func() error { func (self *FilesController) checkSelectedFileNode(callback func(*filetree.FileNode) error) func() error {
@ -260,7 +257,7 @@ func (self *FilesController) checkSelectedFileNode(callback func(*filetree.FileN
} }
func (self *FilesController) Context() types.Context { func (self *FilesController) Context() types.Context {
return self.getContext() return self.context
} }
func (self *FilesController) getSelectedFile() *models.File { func (self *FilesController) getSelectedFile() *models.File {
@ -300,11 +297,11 @@ func (self *FilesController) EnterFile(opts types.OnFocusOpts) error {
return self.c.ErrorMsg(self.c.Tr.FileStagingRequirements) return self.c.ErrorMsg(self.c.Tr.FileStagingRequirements)
} }
return self.c.PushContext(self.getContexts().Staging, opts) return self.c.PushContext(self.contexts.Staging, opts)
} }
func (self *FilesController) allFilesStaged() bool { func (self *FilesController) allFilesStaged() bool {
for _, file := range self.getFiles() { for _, file := range self.model.Files {
if file.HasUnstagedChanges { if file.HasUnstagedChanges {
return false return false
} }
@ -329,7 +326,7 @@ func (self *FilesController) stageAll() error {
return err return err
} }
return self.getContexts().Files.HandleFocus() return self.contexts.Files.HandleFocus()
} }
func (self *FilesController) ignore(node *filetree.FileNode) error { func (self *FilesController) ignore(node *filetree.FileNode) error {
@ -434,7 +431,7 @@ func (self *FilesController) HandleCommitPress() error {
return self.c.Error(err) return self.c.Error(err)
} }
if len(self.getFiles()) == 0 { if len(self.model.Files) == 0 {
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle) return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
} }
@ -459,7 +456,7 @@ func (self *FilesController) HandleCommitPress() error {
} }
} }
if err := self.c.PushContext(self.getContexts().CommitMessage); err != nil { if err := self.c.PushContext(self.contexts.CommitMessage); err != nil {
return err return err
} }
@ -485,7 +482,7 @@ func (self *FilesController) promptToStageAllAndRetry(retry func() error) error
} }
func (self *FilesController) handleAmendCommitPress() error { func (self *FilesController) handleAmendCommitPress() error {
if len(self.getFiles()) == 0 { if len(self.model.Files) == 0 {
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle) return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
} }
@ -493,7 +490,7 @@ func (self *FilesController) handleAmendCommitPress() error {
return self.promptToStageAllAndRetry(self.handleAmendCommitPress) return self.promptToStageAllAndRetry(self.handleAmendCommitPress)
} }
if len(self.getCommits()) == 0 { if len(self.model.Commits) == 0 {
return self.c.ErrorMsg(self.c.Tr.NoCommitToAmend) return self.c.ErrorMsg(self.c.Tr.NoCommitToAmend)
} }
@ -511,7 +508,7 @@ func (self *FilesController) handleAmendCommitPress() error {
// HandleCommitEditorPress - handle when the user wants to commit changes via // HandleCommitEditorPress - handle when the user wants to commit changes via
// their editor rather than via the popup panel // their editor rather than via the popup panel
func (self *FilesController) HandleCommitEditorPress() error { func (self *FilesController) HandleCommitEditorPress() error {
if len(self.getFiles()) == 0 { if len(self.model.Files) == 0 {
return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle) return self.c.ErrorMsg(self.c.Tr.NoFilesStagedTitle)
} }
@ -552,8 +549,8 @@ func (self *FilesController) handleStatusFilterPressed() error {
} }
func (self *FilesController) setStatusFiltering(filter filetree.FileTreeDisplayFilter) error { func (self *FilesController) setStatusFiltering(filter filetree.FileTreeDisplayFilter) error {
self.getContext().FileTreeViewModel.SetFilter(filter) self.context.FileTreeViewModel.SetFilter(filter)
return self.c.PostRefreshUpdate(self.getContext()) return self.c.PostRefreshUpdate(self.context)
} }
func (self *FilesController) edit(node *filetree.FileNode) error { func (self *FilesController) edit(node *filetree.FileNode) error {
@ -643,9 +640,9 @@ func (self *FilesController) handleToggleDirCollapsed() error {
return nil return nil
} }
self.getContext().FileTreeViewModel.ToggleCollapsed(node.GetPath()) self.context.FileTreeViewModel.ToggleCollapsed(node.GetPath())
if err := self.c.PostRefreshUpdate(self.getContexts().Files); err != nil { if err := self.c.PostRefreshUpdate(self.contexts.Files); err != nil {
self.c.Log.Error(err) self.c.Log.Error(err)
} }
@ -653,9 +650,9 @@ func (self *FilesController) handleToggleDirCollapsed() error {
} }
func (self *FilesController) toggleTreeView() error { func (self *FilesController) toggleTreeView() error {
self.getContext().FileTreeViewModel.ToggleShowTree() self.context.FileTreeViewModel.ToggleShowTree()
return self.c.PostRefreshUpdate(self.getContext()) return self.c.PostRefreshUpdate(self.context)
} }
func (self *FilesController) OpenMergeTool() error { func (self *FilesController) OpenMergeTool() error {

View File

@ -24,7 +24,7 @@ type (
type LocalCommitsController struct { type LocalCommitsController struct {
c *types.ControllerCommon c *types.ControllerCommon
getContext func() types.IListContext context types.IListContext
os *oscommands.OSCommand os *oscommands.OSCommand
git *commands.GitCommand git *commands.GitCommand
tagsHelper *TagsHelper tagsHelper *TagsHelper
@ -33,7 +33,7 @@ type LocalCommitsController struct {
rebaseHelper *RebaseHelper rebaseHelper *RebaseHelper
getSelectedLocalCommit func() *models.Commit getSelectedLocalCommit func() *models.Commit
getCommits func() []*models.Commit model *types.Model
getSelectedLocalCommitIdx func() int getSelectedLocalCommitIdx func() int
CheckMergeOrRebase CheckMergeOrRebase CheckMergeOrRebase CheckMergeOrRebase
pullFiles PullFilesFn pullFiles PullFilesFn
@ -49,7 +49,7 @@ var _ types.IController = &LocalCommitsController{}
func NewLocalCommitsController( func NewLocalCommitsController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() types.IListContext, context types.IListContext,
os *oscommands.OSCommand, os *oscommands.OSCommand,
git *commands.GitCommand, git *commands.GitCommand,
tagsHelper *TagsHelper, tagsHelper *TagsHelper,
@ -57,7 +57,7 @@ func NewLocalCommitsController(
cherryPickHelper *CherryPickHelper, cherryPickHelper *CherryPickHelper,
rebaseHelper *RebaseHelper, rebaseHelper *RebaseHelper,
getSelectedLocalCommit func() *models.Commit, getSelectedLocalCommit func() *models.Commit,
getCommits func() []*models.Commit, model *types.Model,
getSelectedLocalCommitIdx func() int, getSelectedLocalCommitIdx func() int,
CheckMergeOrRebase CheckMergeOrRebase, CheckMergeOrRebase CheckMergeOrRebase,
pullFiles PullFilesFn, pullFiles PullFilesFn,
@ -70,7 +70,7 @@ func NewLocalCommitsController(
) *LocalCommitsController { ) *LocalCommitsController {
return &LocalCommitsController{ return &LocalCommitsController{
c: c, c: c,
getContext: getContext, context: context,
os: os, os: os,
git: git, git: git,
tagsHelper: tagsHelper, tagsHelper: tagsHelper,
@ -78,7 +78,7 @@ func NewLocalCommitsController(
cherryPickHelper: cherryPickHelper, cherryPickHelper: cherryPickHelper,
rebaseHelper: rebaseHelper, rebaseHelper: rebaseHelper,
getSelectedLocalCommit: getSelectedLocalCommit, getSelectedLocalCommit: getSelectedLocalCommit,
getCommits: getCommits, model: model,
getSelectedLocalCommitIdx: getSelectedLocalCommitIdx, getSelectedLocalCommitIdx: getSelectedLocalCommitIdx,
CheckMergeOrRebase: CheckMergeOrRebase, CheckMergeOrRebase: CheckMergeOrRebase,
pullFiles: pullFiles, pullFiles: pullFiles,
@ -199,7 +199,7 @@ func (self *LocalCommitsController) Keybindings(
}, },
{ {
Key: gocui.MouseLeft, Key: gocui.MouseLeft,
Handler: func() error { return self.getContext().HandleClick(self.checkSelected(self.enter)) }, Handler: func() error { return self.context.HandleClick(self.checkSelected(self.enter)) },
}, },
} }
@ -246,11 +246,11 @@ func (self *LocalCommitsController) Keybindings(
}, },
}...) }...)
return append(bindings, self.getContext().Keybindings(getKey, config, guards)...) return append(bindings, self.context.Keybindings(getKey, config, guards)...)
} }
func (self *LocalCommitsController) squashDown() error { func (self *LocalCommitsController) squashDown() error {
if len(self.getCommits()) <= 1 { if len(self.model.Commits) <= 1 {
return self.c.ErrorMsg(self.c.Tr.YouNoCommitsToSquash) return self.c.ErrorMsg(self.c.Tr.YouNoCommitsToSquash)
} }
@ -275,7 +275,7 @@ func (self *LocalCommitsController) squashDown() error {
} }
func (self *LocalCommitsController) fixup() error { func (self *LocalCommitsController) fixup() error {
if len(self.getCommits()) <= 1 { if len(self.model.Commits) <= 1 {
return self.c.ErrorMsg(self.c.Tr.YouNoCommitsToSquash) return self.c.ErrorMsg(self.c.Tr.YouNoCommitsToSquash)
} }
@ -319,7 +319,7 @@ func (self *LocalCommitsController) reword(commit *models.Commit) error {
InitialContent: message, InitialContent: message,
HandleConfirm: func(response string) error { HandleConfirm: func(response string) error {
self.c.LogAction(self.c.Tr.Actions.RewordCommit) self.c.LogAction(self.c.Tr.Actions.RewordCommit)
if err := self.git.Rebase.RewordCommit(self.getCommits(), self.getSelectedLocalCommitIdx(), response); err != nil { if err := self.git.Rebase.RewordCommit(self.model.Commits, self.getSelectedLocalCommitIdx(), response); err != nil {
return self.c.Error(err) return self.c.Error(err)
} }
@ -339,7 +339,7 @@ func (self *LocalCommitsController) rewordEditor() error {
self.c.LogAction(self.c.Tr.Actions.RewordCommit) self.c.LogAction(self.c.Tr.Actions.RewordCommit)
subProcess, err := self.git.Rebase.RewordCommitInEditor( subProcess, err := self.git.Rebase.RewordCommitInEditor(
self.getCommits(), self.getSelectedLocalCommitIdx(), self.model.Commits, self.getSelectedLocalCommitIdx(),
) )
if err != nil { if err != nil {
return self.c.Error(err) return self.c.Error(err)
@ -402,7 +402,7 @@ func (self *LocalCommitsController) pick() error {
} }
func (self *LocalCommitsController) interactiveRebase(action string) error { func (self *LocalCommitsController) interactiveRebase(action string) error {
err := self.git.Rebase.InteractiveRebase(self.getCommits(), self.getSelectedLocalCommitIdx(), action) err := self.git.Rebase.InteractiveRebase(self.model.Commits, self.getSelectedLocalCommitIdx(), action)
return self.CheckMergeOrRebase(err) return self.CheckMergeOrRebase(err)
} }
@ -441,9 +441,9 @@ func (self *LocalCommitsController) handleMidRebaseCommand(action string) (bool,
} }
func (self *LocalCommitsController) handleCommitMoveDown() error { func (self *LocalCommitsController) handleCommitMoveDown() error {
index := self.getContext().GetPanelState().GetSelectedLineIdx() index := self.context.GetPanelState().GetSelectedLineIdx()
commits := self.getCommits() commits := self.model.Commits
selectedCommit := self.getCommits()[index] selectedCommit := self.model.Commits[index]
if selectedCommit.Status == "rebasing" { if selectedCommit.Status == "rebasing" {
if commits[index+1].Status != "rebasing" { if commits[index+1].Status != "rebasing" {
return nil return nil
@ -458,7 +458,7 @@ func (self *LocalCommitsController) handleCommitMoveDown() error {
return self.c.Error(err) return self.c.Error(err)
} }
// TODO: use MoveSelectedLine // TODO: use MoveSelectedLine
_ = self.getContext().HandleNextLine() _ = self.context.HandleNextLine()
return self.c.Refresh(types.RefreshOptions{ return self.c.Refresh(types.RefreshOptions{
Mode: types.SYNC, Scope: []types.RefreshableView{types.REBASE_COMMITS}, Mode: types.SYNC, Scope: []types.RefreshableView{types.REBASE_COMMITS},
}) })
@ -466,22 +466,22 @@ func (self *LocalCommitsController) handleCommitMoveDown() error {
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error { return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
self.c.LogAction(self.c.Tr.Actions.MoveCommitDown) self.c.LogAction(self.c.Tr.Actions.MoveCommitDown)
err := self.git.Rebase.MoveCommitDown(self.getCommits(), index) err := self.git.Rebase.MoveCommitDown(self.model.Commits, index)
if err == nil { if err == nil {
// TODO: use MoveSelectedLine // TODO: use MoveSelectedLine
_ = self.getContext().HandleNextLine() _ = self.context.HandleNextLine()
} }
return self.CheckMergeOrRebase(err) return self.CheckMergeOrRebase(err)
}) })
} }
func (self *LocalCommitsController) handleCommitMoveUp() error { func (self *LocalCommitsController) handleCommitMoveUp() error {
index := self.getContext().GetPanelState().GetSelectedLineIdx() index := self.context.GetPanelState().GetSelectedLineIdx()
if index == 0 { if index == 0 {
return nil return nil
} }
selectedCommit := self.getCommits()[index] selectedCommit := self.model.Commits[index]
if selectedCommit.Status == "rebasing" { if selectedCommit.Status == "rebasing" {
// logging directly here because MoveTodoDown doesn't have enough information // logging directly here because MoveTodoDown doesn't have enough information
// to provide a useful log // to provide a useful log
@ -494,7 +494,7 @@ func (self *LocalCommitsController) handleCommitMoveUp() error {
if err := self.git.Rebase.MoveTodoDown(index - 1); err != nil { if err := self.git.Rebase.MoveTodoDown(index - 1); err != nil {
return self.c.Error(err) return self.c.Error(err)
} }
_ = self.getContext().HandlePrevLine() _ = self.context.HandlePrevLine()
return self.c.Refresh(types.RefreshOptions{ return self.c.Refresh(types.RefreshOptions{
Mode: types.SYNC, Scope: []types.RefreshableView{types.REBASE_COMMITS}, Mode: types.SYNC, Scope: []types.RefreshableView{types.REBASE_COMMITS},
}) })
@ -502,9 +502,9 @@ func (self *LocalCommitsController) handleCommitMoveUp() error {
return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error { return self.c.WithWaitingStatus(self.c.Tr.MovingStatus, func() error {
self.c.LogAction(self.c.Tr.Actions.MoveCommitUp) self.c.LogAction(self.c.Tr.Actions.MoveCommitUp)
err := self.git.Rebase.MoveCommitDown(self.getCommits(), index-1) err := self.git.Rebase.MoveCommitDown(self.model.Commits, index-1)
if err == nil { if err == nil {
_ = self.getContext().HandlePrevLine() _ = self.context.HandlePrevLine()
} }
return self.CheckMergeOrRebase(err) return self.CheckMergeOrRebase(err)
}) })
@ -572,7 +572,7 @@ func (self *LocalCommitsController) createRevertMergeCommitMenu(commit *models.C
} }
func (self *LocalCommitsController) afterRevertCommit() error { func (self *LocalCommitsController) afterRevertCommit() error {
_ = self.getContext().HandleNextLine() _ = self.context.HandleNextLine()
return self.c.Refresh(types.RefreshOptions{ return self.c.Refresh(types.RefreshOptions{
Mode: types.BLOCK_UI, Scope: []types.RefreshableView{types.COMMITS, types.BRANCHES}, Mode: types.BLOCK_UI, Scope: []types.RefreshableView{types.COMMITS, types.BRANCHES},
}) })
@ -582,7 +582,7 @@ func (self *LocalCommitsController) enter(commit *models.Commit) error {
return self.switchToCommitFilesContext(SwitchToCommitFilesContextOpts{ return self.switchToCommitFilesContext(SwitchToCommitFilesContextOpts{
RefName: commit.Sha, RefName: commit.Sha,
CanRebase: true, CanRebase: true,
Context: self.getContext(), Context: self.context,
WindowName: "commits", WindowName: "commits",
}) })
} }
@ -672,7 +672,7 @@ func (self *LocalCommitsController) gotoBottom() error {
} }
} }
_ = self.getContext().HandleGotoBottom() _ = self.context.HandleGotoBottom()
return nil return nil
} }
@ -804,7 +804,7 @@ func (self *LocalCommitsController) checkSelected(callback func(*models.Commit)
} }
func (self *LocalCommitsController) Context() types.Context { func (self *LocalCommitsController) Context() types.Context {
return self.getContext() return self.context
} }
func (self *LocalCommitsController) newBranch(commit *models.Commit) error { func (self *LocalCommitsController) newBranch(commit *models.Commit) error {
@ -812,11 +812,11 @@ func (self *LocalCommitsController) newBranch(commit *models.Commit) error {
} }
func (self *LocalCommitsController) copy(commit *models.Commit) error { func (self *LocalCommitsController) copy(commit *models.Commit) error {
return self.cherryPickHelper.Copy(commit, self.getCommits(), self.getContext()) return self.cherryPickHelper.Copy(commit, self.model.Commits, self.context)
} }
func (self *LocalCommitsController) copyRange(*models.Commit) error { func (self *LocalCommitsController) copyRange(*models.Commit) error {
return self.cherryPickHelper.CopyRange(self.getContext().GetPanelState().GetSelectedLineIdx(), self.getCommits(), self.getContext()) return self.cherryPickHelper.CopyRange(self.context.GetPanelState().GetSelectedLineIdx(), self.model.Commits, self.context)
} }
func (self *LocalCommitsController) paste() error { func (self *LocalCommitsController) paste() error {

View File

@ -7,8 +7,8 @@ import (
) )
type MenuController struct { type MenuController struct {
c *types.ControllerCommon c *types.ControllerCommon
getContext func() types.IListContext context types.IListContext
getSelectedMenuItem func() *types.MenuItem getSelectedMenuItem func() *types.MenuItem
} }
@ -17,12 +17,12 @@ var _ types.IController = &MenuController{}
func NewMenuController( func NewMenuController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() types.IListContext, context types.IListContext,
getSelectedMenuItem func() *types.MenuItem, getSelectedMenuItem func() *types.MenuItem,
) *MenuController { ) *MenuController {
return &MenuController{ return &MenuController{
c: c, c: c,
getContext: getContext, context: context,
getSelectedMenuItem: getSelectedMenuItem, getSelectedMenuItem: getSelectedMenuItem,
} }
} }
@ -43,11 +43,11 @@ func (self *MenuController) Keybindings(getKey func(key string) interface{}, con
}, },
{ {
Key: gocui.MouseLeft, Key: gocui.MouseLeft,
Handler: func() error { return self.getContext().HandleClick(self.press) }, Handler: func() error { return self.context.HandleClick(self.press) },
}, },
} }
return append(bindings, self.getContext().Keybindings(getKey, config, guards)...) return append(bindings, self.context.Keybindings(getKey, config, guards)...)
} }
func (self *MenuController) press() error { func (self *MenuController) press() error {
@ -65,5 +65,5 @@ func (self *MenuController) press() error {
} }
func (self *MenuController) Context() types.Context { func (self *MenuController) Context() types.Context {
return self.getContext() return self.context
} }

View File

@ -12,20 +12,20 @@ import (
type RebaseHelper struct { type RebaseHelper struct {
c *types.ControllerCommon c *types.ControllerCommon
getContexts func() context.ContextTree contexts *context.ContextTree
git *commands.GitCommand git *commands.GitCommand
takeOverMergeConflictScrolling func() takeOverMergeConflictScrolling func()
} }
func NewRebaseHelper( func NewRebaseHelper(
c *types.ControllerCommon, c *types.ControllerCommon,
getContexts func() context.ContextTree, contexts *context.ContextTree,
git *commands.GitCommand, git *commands.GitCommand,
takeOverMergeConflictScrolling func(), takeOverMergeConflictScrolling func(),
) *RebaseHelper { ) *RebaseHelper {
return &RebaseHelper{ return &RebaseHelper{
c: c, c: c,
getContexts: getContexts, contexts: contexts,
git: git, git: git,
takeOverMergeConflictScrolling: takeOverMergeConflictScrolling, takeOverMergeConflictScrolling: takeOverMergeConflictScrolling,
} }
@ -139,7 +139,7 @@ func (self *RebaseHelper) CheckMergeOrRebase(result error) error {
Prompt: self.c.Tr.FoundConflicts, Prompt: self.c.Tr.FoundConflicts,
HandlersManageFocus: true, HandlersManageFocus: true,
HandleConfirm: func() error { HandleConfirm: func() error {
return self.c.PushContext(self.getContexts().Files) return self.c.PushContext(self.contexts.Files)
}, },
HandleClose: func() error { HandleClose: func() error {
if err := self.c.PopContext(); err != nil { if err := self.c.PopContext(); err != nil {

View File

@ -22,20 +22,20 @@ type IRefsHelper interface {
type RefsHelper struct { type RefsHelper struct {
c *types.ControllerCommon c *types.ControllerCommon
git *commands.GitCommand git *commands.GitCommand
getContexts func() context.ContextTree contexts *context.ContextTree
limitCommits func() limitCommits func()
} }
func NewRefsHelper( func NewRefsHelper(
c *types.ControllerCommon, c *types.ControllerCommon,
git *commands.GitCommand, git *commands.GitCommand,
getContexts func() context.ContextTree, contexts *context.ContextTree,
limitCommits func(), limitCommits func(),
) *RefsHelper { ) *RefsHelper {
return &RefsHelper{ return &RefsHelper{
c: c, c: c,
git: git, git: git,
getContexts: getContexts, contexts: contexts,
limitCommits: limitCommits, limitCommits: limitCommits,
} }
} }
@ -51,9 +51,9 @@ func (self *RefsHelper) CheckoutRef(ref string, options types.CheckoutRefOptions
cmdOptions := git_commands.CheckoutOptions{Force: false, EnvVars: options.EnvVars} cmdOptions := git_commands.CheckoutOptions{Force: false, EnvVars: options.EnvVars}
onSuccess := func() { onSuccess := func() {
self.getContexts().Branches.GetPanelState().SetSelectedLineIdx(0) self.contexts.Branches.GetPanelState().SetSelectedLineIdx(0)
self.getContexts().BranchCommits.GetPanelState().SetSelectedLineIdx(0) self.contexts.BranchCommits.GetPanelState().SetSelectedLineIdx(0)
self.getContexts().ReflogCommits.GetPanelState().SetSelectedLineIdx(0) self.contexts.ReflogCommits.GetPanelState().SetSelectedLineIdx(0)
// loading a heap of commits is slow so we limit them whenever doing a reset // loading a heap of commits is slow so we limit them whenever doing a reset
self.limitCommits() self.limitCommits()
} }
@ -107,12 +107,12 @@ func (self *RefsHelper) ResetToRef(ref string, strength string, envVars []string
return self.c.Error(err) return self.c.Error(err)
} }
self.getContexts().BranchCommits.GetPanelState().SetSelectedLineIdx(0) self.contexts.BranchCommits.GetPanelState().SetSelectedLineIdx(0)
self.getContexts().ReflogCommits.GetPanelState().SetSelectedLineIdx(0) self.contexts.ReflogCommits.GetPanelState().SetSelectedLineIdx(0)
// loading a heap of commits is slow so we limit them whenever doing a reset // loading a heap of commits is slow so we limit them whenever doing a reset
self.limitCommits() self.limitCommits()
if err := self.c.PushContext(self.getContexts().BranchCommits); err != nil { if err := self.c.PushContext(self.contexts.BranchCommits); err != nil {
return err return err
} }
@ -163,14 +163,14 @@ func (self *RefsHelper) NewBranch(from string, fromFormattedName string, suggest
return err return err
} }
if self.c.CurrentContext() != self.getContexts().Branches { if self.c.CurrentContext() != self.contexts.Branches {
if err := self.c.PushContext(self.getContexts().Branches); err != nil { if err := self.c.PushContext(self.contexts.Branches); err != nil {
return err return err
} }
} }
self.getContexts().BranchCommits.GetPanelState().SetSelectedLineIdx(0) self.contexts.BranchCommits.GetPanelState().SetSelectedLineIdx(0)
self.getContexts().Branches.GetPanelState().SetSelectedLineIdx(0) self.contexts.Branches.GetPanelState().SetSelectedLineIdx(0)
return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC}) return self.c.Refresh(types.RefreshOptions{Mode: types.ASYNC})
}, },

View File

@ -11,30 +11,30 @@ import (
) )
type RemotesController struct { type RemotesController struct {
c *types.ControllerCommon c *types.ControllerCommon
getContext func() types.IListContext context types.IListContext
git *commands.GitCommand git *commands.GitCommand
getSelectedRemote func() *models.Remote getSelectedRemote func() *models.Remote
setRemoteBranches func([]*models.RemoteBranch) setRemoteBranches func([]*models.RemoteBranch)
getContexts func() context.ContextTree contexts *context.ContextTree
} }
var _ types.IController = &RemotesController{} var _ types.IController = &RemotesController{}
func NewRemotesController( func NewRemotesController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() types.IListContext, context types.IListContext,
git *commands.GitCommand, git *commands.GitCommand,
getContexts func() context.ContextTree, contexts *context.ContextTree,
getSelectedRemote func() *models.Remote, getSelectedRemote func() *models.Remote,
setRemoteBranches func([]*models.RemoteBranch), setRemoteBranches func([]*models.RemoteBranch),
) *RemotesController { ) *RemotesController {
return &RemotesController{ return &RemotesController{
c: c, c: c,
git: git, git: git,
getContexts: getContexts, contexts: contexts,
getContext: getContext, context: context,
getSelectedRemote: getSelectedRemote, getSelectedRemote: getSelectedRemote,
setRemoteBranches: setRemoteBranches, setRemoteBranches: setRemoteBranches,
} }
@ -48,7 +48,7 @@ func (self *RemotesController) Keybindings(getKey func(key string) interface{},
}, },
{ {
Key: gocui.MouseLeft, Key: gocui.MouseLeft,
Handler: func() error { return self.getContext().HandleClick(self.checkSelected(self.enter)) }, Handler: func() error { return self.context.HandleClick(self.checkSelected(self.enter)) },
}, },
{ {
Key: getKey(config.Branches.FetchRemote), Key: getKey(config.Branches.FetchRemote),
@ -72,7 +72,7 @@ func (self *RemotesController) Keybindings(getKey func(key string) interface{},
}, },
} }
return append(bindings, self.getContext().Keybindings(getKey, config, guards)...) return append(bindings, self.context.Keybindings(getKey, config, guards)...)
} }
func (self *RemotesController) enter(remote *models.Remote) error { func (self *RemotesController) enter(remote *models.Remote) error {
@ -83,9 +83,9 @@ func (self *RemotesController) enter(remote *models.Remote) error {
if len(remote.Branches) == 0 { if len(remote.Branches) == 0 {
newSelectedLine = -1 newSelectedLine = -1
} }
self.getContexts().RemoteBranches.GetPanelState().SetSelectedLineIdx(newSelectedLine) self.contexts.RemoteBranches.GetPanelState().SetSelectedLineIdx(newSelectedLine)
return self.c.PushContext(self.getContexts().RemoteBranches) return self.c.PushContext(self.contexts.RemoteBranches)
} }
func (self *RemotesController) add() error { func (self *RemotesController) add() error {
@ -191,5 +191,5 @@ func (self *RemotesController) checkSelected(callback func(*models.Remote) error
} }
func (self *RemotesController) Context() types.Context { func (self *RemotesController) Context() types.Context {
return self.getContext() return self.context
} }

View File

@ -10,11 +10,11 @@ import (
) )
type TagsController struct { type TagsController struct {
c *types.ControllerCommon c *types.ControllerCommon
getContext func() *context.TagsContext context *context.TagsContext
git *commands.GitCommand git *commands.GitCommand
getContexts func() context.ContextTree contexts *context.ContextTree
tagsHelper *TagsHelper tagsHelper *TagsHelper
refsHelper IRefsHelper refsHelper IRefsHelper
suggestionsHelper ISuggestionsHelper suggestionsHelper ISuggestionsHelper
@ -26,9 +26,9 @@ var _ types.IController = &TagsController{}
func NewTagsController( func NewTagsController(
c *types.ControllerCommon, c *types.ControllerCommon,
getContext func() *context.TagsContext, context *context.TagsContext,
git *commands.GitCommand, git *commands.GitCommand,
getContexts func() context.ContextTree, contexts *context.ContextTree,
tagsHelper *TagsHelper, tagsHelper *TagsHelper,
refsHelper IRefsHelper, refsHelper IRefsHelper,
suggestionsHelper ISuggestionsHelper, suggestionsHelper ISuggestionsHelper,
@ -37,9 +37,9 @@ func NewTagsController(
) *TagsController { ) *TagsController {
return &TagsController{ return &TagsController{
c: c, c: c,
getContext: getContext, context: context,
git: git, git: git,
getContexts: getContexts, contexts: contexts,
tagsHelper: tagsHelper, tagsHelper: tagsHelper,
refsHelper: refsHelper, refsHelper: refsHelper,
suggestionsHelper: suggestionsHelper, suggestionsHelper: suggestionsHelper,
@ -83,7 +83,7 @@ func (self *TagsController) Keybindings(getKey func(key string) interface{}, con
}, },
} }
return append(bindings, self.getContext().Keybindings(getKey, config, guards)...) return append(bindings, self.context.Keybindings(getKey, config, guards)...)
} }
func (self *TagsController) checkout(tag *models.Tag) error { func (self *TagsController) checkout(tag *models.Tag) error {
@ -91,7 +91,7 @@ func (self *TagsController) checkout(tag *models.Tag) error {
if err := self.refsHelper.CheckoutRef(tag.Name, types.CheckoutRefOptions{}); err != nil { if err := self.refsHelper.CheckoutRef(tag.Name, types.CheckoutRefOptions{}); err != nil {
return err return err
} }
return self.c.PushContext(self.getContexts().Branches) return self.c.PushContext(self.contexts.Branches)
} }
func (self *TagsController) enter(tag *models.Tag) error { func (self *TagsController) enter(tag *models.Tag) error {
@ -151,12 +151,12 @@ func (self *TagsController) createResetMenu(tag *models.Tag) error {
func (self *TagsController) create() error { func (self *TagsController) create() error {
// leaving commit SHA blank so that we're just creating the tag for the current commit // leaving commit SHA blank so that we're just creating the tag for the current commit
return self.tagsHelper.CreateTagMenu("", func() { self.getContext().GetPanelState().SetSelectedLineIdx(0) }) return self.tagsHelper.CreateTagMenu("", func() { self.context.GetPanelState().SetSelectedLineIdx(0) })
} }
func (self *TagsController) withSelectedTag(f func(tag *models.Tag) error) func() error { func (self *TagsController) withSelectedTag(f func(tag *models.Tag) error) func() error {
return func() error { return func() error {
tag := self.getContext().GetSelectedTag() tag := self.context.GetSelectedTag()
if tag == nil { if tag == nil {
return nil return nil
} }
@ -166,5 +166,5 @@ func (self *TagsController) withSelectedTag(f func(tag *models.Tag) error) func(
} }
func (self *TagsController) Context() types.Context { func (self *TagsController) Context() types.Context {
return self.getContext() return self.context
} }

View File

@ -192,7 +192,7 @@ type GuiRepoState struct {
MainContext types.ContextKey // used to keep the main and secondary views' contexts in sync MainContext types.ContextKey // used to keep the main and secondary views' contexts in sync
ContextManager ContextManager ContextManager ContextManager
Contexts context.ContextTree Contexts *context.ContextTree
ViewContextMap map[string]types.Context ViewContextMap map[string]types.Context
ViewTabContextMap map[string][]context.TabContext ViewTabContextMap map[string][]context.TabContext
@ -548,14 +548,13 @@ func NewGui(
func (gui *Gui) resetControllers() { func (gui *Gui) resetControllers() {
controllerCommon := gui.c controllerCommon := gui.c
osCommand := gui.OSCommand osCommand := gui.OSCommand
getContexts := func() context.ContextTree { return gui.State.Contexts } rebaseHelper := controllers.NewRebaseHelper(controllerCommon, gui.State.Contexts, gui.git, gui.takeOverMergeConflictScrolling)
rebaseHelper := controllers.NewRebaseHelper(controllerCommon, getContexts, gui.git, gui.takeOverMergeConflictScrolling)
model := gui.State.Model model := gui.State.Model
gui.helpers = &Helpers{ gui.helpers = &Helpers{
Refs: controllers.NewRefsHelper( Refs: controllers.NewRefsHelper(
controllerCommon, controllerCommon,
gui.git, gui.git,
getContexts, gui.State.Contexts,
func() { gui.State.Panels.Commits.LimitCommits = true }, func() { gui.State.Panels.Commits.LimitCommits = true },
), ),
Bisect: controllers.NewBisectHelper(controllerCommon, gui.git), Bisect: controllers.NewBisectHelper(controllerCommon, gui.git),
@ -567,7 +566,7 @@ func (gui *Gui) resetControllers() {
CherryPick: controllers.NewCherryPickHelper( CherryPick: controllers.NewCherryPickHelper(
controllerCommon, controllerCommon,
gui.git, gui.git,
getContexts, gui.State.Contexts,
func() *cherrypicking.CherryPicking { return gui.State.Modes.CherryPicking }, func() *cherrypicking.CherryPicking { return gui.State.Modes.CherryPicking },
rebaseHelper, rebaseHelper,
), ),
@ -592,18 +591,17 @@ func (gui *Gui) resetControllers() {
), ),
Files: controllers.NewFilesController( Files: controllers.NewFilesController(
controllerCommon, controllerCommon,
func() *context.WorkingTreeContext { return gui.State.Contexts.Files }, gui.State.Contexts.Files,
func() []*models.File { return gui.State.Model.Files }, model,
gui.git, gui.git,
osCommand, osCommand,
gui.getSelectedFileNode, gui.getSelectedFileNode,
getContexts, gui.State.Contexts,
gui.enterSubmodule, gui.enterSubmodule,
func() []*models.SubmoduleConfig { return gui.State.Model.Submodules }, func() []*models.SubmoduleConfig { return gui.State.Model.Submodules },
gui.getSetTextareaTextFn(func() *gocui.View { return gui.Views.CommitMessage }), gui.getSetTextareaTextFn(func() *gocui.View { return gui.Views.CommitMessage }),
gui.withGpgHandling, gui.withGpgHandling,
func() string { return gui.State.failedCommitMessage }, func() string { return gui.State.failedCommitMessage },
func() []*models.Commit { return gui.State.Model.Commits },
gui.getSelectedPath, gui.getSelectedPath,
gui.switchToMerge, gui.switchToMerge,
gui.helpers.Suggestions, gui.helpers.Suggestions,
@ -613,9 +611,9 @@ func (gui *Gui) resetControllers() {
), ),
Tags: controllers.NewTagsController( Tags: controllers.NewTagsController(
controllerCommon, controllerCommon,
func() *context.TagsContext { return gui.State.Contexts.Tags }, gui.State.Contexts.Tags,
gui.git, gui.git,
getContexts, gui.State.Contexts,
gui.helpers.Tags, gui.helpers.Tags,
gui.helpers.Refs, gui.helpers.Refs,
gui.helpers.Suggestions, gui.helpers.Suggestions,
@ -623,7 +621,7 @@ func (gui *Gui) resetControllers() {
), ),
LocalCommits: controllers.NewLocalCommitsController( LocalCommits: controllers.NewLocalCommitsController(
controllerCommon, controllerCommon,
func() types.IListContext { return gui.State.Contexts.BranchCommits }, gui.State.Contexts.BranchCommits,
osCommand, osCommand,
gui.git, gui.git,
gui.helpers.Tags, gui.helpers.Tags,
@ -631,7 +629,7 @@ func (gui *Gui) resetControllers() {
gui.helpers.CherryPick, gui.helpers.CherryPick,
gui.helpers.Rebase, gui.helpers.Rebase,
gui.getSelectedLocalCommit, gui.getSelectedLocalCommit,
func() []*models.Commit { return gui.State.Model.Commits }, model,
func() int { return gui.State.Panels.Commits.SelectedLineIdx }, func() int { return gui.State.Panels.Commits.SelectedLineIdx },
gui.helpers.Rebase.CheckMergeOrRebase, gui.helpers.Rebase.CheckMergeOrRebase,
syncController.HandlePull, syncController.HandlePull,
@ -644,20 +642,20 @@ func (gui *Gui) resetControllers() {
), ),
Remotes: controllers.NewRemotesController( Remotes: controllers.NewRemotesController(
controllerCommon, controllerCommon,
func() types.IListContext { return gui.State.Contexts.Remotes }, gui.State.Contexts.Remotes,
gui.git, gui.git,
getContexts, gui.State.Contexts,
gui.getSelectedRemote, gui.getSelectedRemote,
func(branches []*models.RemoteBranch) { gui.State.Model.RemoteBranches = branches }, func(branches []*models.RemoteBranch) { gui.State.Model.RemoteBranches = branches },
), ),
Menu: controllers.NewMenuController( Menu: controllers.NewMenuController(
controllerCommon, controllerCommon,
func() types.IListContext { return gui.State.Contexts.Menu }, gui.State.Contexts.Menu,
gui.getSelectedMenuItem, gui.getSelectedMenuItem,
), ),
Bisect: controllers.NewBisectController( Bisect: controllers.NewBisectController(
controllerCommon, controllerCommon,
func() types.IListContext { return gui.State.Contexts.BranchCommits }, gui.State.Contexts.BranchCommits,
gui.git, gui.git,
gui.helpers.Bisect, gui.helpers.Bisect,
gui.getSelectedLocalCommit, gui.getSelectedLocalCommit,