diff options
author | Stefan Haller <stefan@haller-berlin.de> | 2023-08-05 11:19:16 +0200 |
---|---|---|
committer | Stefan Haller <stefan@haller-berlin.de> | 2023-08-29 08:16:40 +0200 |
commit | e8fac6ca7360faf5db1c82af2b2e9c87aa5a5edc (patch) | |
tree | ff9d9f469cf796f88bcd209f72005be2537cab1e | |
parent | 4de3fadb00e3829bcda3ae2d4379251c6a81c0a8 (diff) |
Extract a SubCommitsHelper from SwitchToSubCommitsController
We want to use it from BranchesController too.
-rw-r--r-- | pkg/gui/controllers.go | 21 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/helpers.go | 2 | ||||
-rw-r--r-- | pkg/gui/controllers/helpers/sub_commits_helper.go | 69 | ||||
-rw-r--r-- | pkg/gui/controllers/switch_to_sub_commits_controller.go | 47 |
4 files changed, 88 insertions, 51 deletions
diff --git a/pkg/gui/controllers.go b/pkg/gui/controllers.go index 1430ad239..40a482f30 100644 --- a/pkg/gui/controllers.go +++ b/pkg/gui/controllers.go @@ -76,6 +76,13 @@ func (gui *Gui) resetHelpersAndControllers() { helperCommon, func() *status.StatusManager { return gui.statusManager }, ) + + setSubCommits := func(commits []*models.Commit) { + gui.Mutexes.SubCommitsMutex.Lock() + defer gui.Mutexes.SubCommitsMutex.Unlock() + + gui.State.Model.SubCommits = commits + } gui.helpers = &helpers.Helpers{ Refs: refsHelper, Host: helpers.NewHostHelper(helperCommon), @@ -111,8 +118,9 @@ func (gui *Gui) resetHelpersAndControllers() { modeHelper, appStatusHelper, ), - Search: helpers.NewSearchHelper(helperCommon), - Worktree: worktreeHelper, + Search: helpers.NewSearchHelper(helperCommon), + Worktree: worktreeHelper, + SubCommits: helpers.NewSubCommitsHelper(helperCommon, refreshHelper, setSubCommits), } gui.CustomCommandsClient = custom_commands.NewClient( @@ -206,13 +214,6 @@ func (gui *Gui) resetHelpersAndControllers() { controllers.AttachControllers(context, sideWindowControllerFactory.Create(context)) } - setSubCommits := func(commits []*models.Commit) { - gui.Mutexes.SubCommitsMutex.Lock() - defer gui.Mutexes.SubCommitsMutex.Unlock() - - gui.State.Model.SubCommits = commits - } - for _, context := range []controllers.CanSwitchToSubCommits{ gui.State.Contexts.Branches, gui.State.Contexts.RemoteBranches, @@ -220,7 +221,7 @@ func (gui *Gui) resetHelpersAndControllers() { gui.State.Contexts.ReflogCommits, } { controllers.AttachControllers(context, controllers.NewSwitchToSubCommitsController( - common, setSubCommits, context, + common, context, )) } diff --git a/pkg/gui/controllers/helpers/helpers.go b/pkg/gui/controllers/helpers/helpers.go index 22a7ea91b..06c5cc973 100644 --- a/pkg/gui/controllers/helpers/helpers.go +++ b/pkg/gui/controllers/helpers/helpers.go @@ -49,6 +49,7 @@ type Helpers struct { WindowArrangement *WindowArrangementHelper Search *SearchHelper Worktree *WorktreeHelper + SubCommits *SubCommitsHelper } func NewStubHelpers() *Helpers { @@ -83,5 +84,6 @@ func NewStubHelpers() *Helpers { WindowArrangement: &WindowArrangementHelper{}, Search: &SearchHelper{}, Worktree: &WorktreeHelper{}, + SubCommits: &SubCommitsHelper{}, } } diff --git a/pkg/gui/controllers/helpers/sub_commits_helper.go b/pkg/gui/controllers/helpers/sub_commits_helper.go new file mode 100644 index 000000000..412c23f0d --- /dev/null +++ b/pkg/gui/controllers/helpers/sub_commits_helper.go @@ -0,0 +1,69 @@ +package helpers + +import ( + "github.com/jesseduffield/lazygit/pkg/commands/git_commands" + "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/gui/types" + "github.com/jesseduffield/lazygit/pkg/utils" +) + +type SubCommitsHelper struct { + c *HelperCommon + + refreshHelper *RefreshHelper + setSubCommits func([]*models.Commit) +} + +func NewSubCommitsHelper( + c *HelperCommon, + refreshHelper *RefreshHelper, + setSubCommits func([]*models.Commit), +) *SubCommitsHelper { + return &SubCommitsHelper{ + c: c, + refreshHelper: refreshHelper, + setSubCommits: setSubCommits, + } +} + +type ViewSubCommitsOpts struct { + Ref types.Ref + Context types.Context + ShowBranchHeads bool +} + +func (self *SubCommitsHelper) ViewSubCommits(opts ViewSubCommitsOpts) error { + commits, err := self.c.Git().Loaders.CommitLoader.GetCommits( + git_commands.GetCommitsOptions{ + Limit: true, + FilterPath: self.c.Modes().Filtering.GetPath(), + IncludeRebaseCommits: false, + RefName: opts.Ref.FullRefName(), + RefForPushedStatus: opts.Ref.FullRefName(), + }, + ) + if err != nil { + return err + } + + self.setSubCommits(commits) + self.refreshHelper.RefreshAuthors(commits) + + subCommitsContext := self.c.Contexts().SubCommits + subCommitsContext.SetSelectedLineIdx(0) + subCommitsContext.SetParentContext(opts.Context) + subCommitsContext.SetWindowName(opts.Context.GetWindowName()) + subCommitsContext.SetTitleRef(utils.TruncateWithEllipsis(opts.Ref.RefName(), 50)) + subCommitsContext.SetRef(opts.Ref) + subCommitsContext.SetLimitCommits(true) + subCommitsContext.SetShowBranchHeads(opts.ShowBranchHeads) + subCommitsContext.ClearSearchString() + subCommitsContext.GetView().ClearSearch() + + err = self.c.PostRefreshUpdate(self.c.Contexts().SubCommits) + if err != nil { + return err + } + + return self.c.PushContext(self.c.Contexts().SubCommits) +} diff --git a/pkg/gui/controllers/switch_to_sub_commits_controller.go b/pkg/gui/controllers/switch_to_sub_commits_controller.go index a2b25efbb..71ed5747c 100644 --- a/pkg/gui/controllers/switch_to_sub_commits_controller.go +++ b/pkg/gui/controllers/switch_to_sub_commits_controller.go @@ -1,10 +1,8 @@ package controllers import ( - "github.com/jesseduffield/lazygit/pkg/commands/git_commands" - "github.com/jesseduffield/lazygit/pkg/commands/models" + "github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers" "github.com/jesseduffield/lazygit/pkg/gui/types" - "github.com/jesseduffield/lazygit/pkg/utils" ) var _ types.IController = &SwitchToSubCommitsController{} @@ -19,20 +17,16 @@ type SwitchToSubCommitsController struct { baseController c *ControllerCommon context CanSwitchToSubCommits - - setSubCommits func([]*models.Commit) } func NewSwitchToSubCommitsController( controllerCommon *ControllerCommon, - setSubCommits func([]*models.Commit), context CanSwitchToSubCommits, ) *SwitchToSubCommitsController { return &SwitchToSubCommitsController{ baseController: baseController{}, c: controllerCommon, context: context, - setSubCommits: setSubCommits, } } @@ -58,40 +52,11 @@ func (self *SwitchToSubCommitsController) viewCommits() error { return nil } - // need to populate my sub commits - commits, err := self.c.Git().Loaders.CommitLoader.GetCommits( - git_commands.GetCommitsOptions{ - Limit: true, - FilterPath: self.c.Modes().Filtering.GetPath(), - IncludeRebaseCommits: false, - RefName: ref.FullRefName(), - RefForPushedStatus: ref.FullRefName(), - }, - ) - if err != nil { - return err - } - - self.setSubCommits(commits) - self.c.Helpers().Refresh.RefreshAuthors(commits) - - subCommitsContext := self.c.Contexts().SubCommits - subCommitsContext.SetSelectedLineIdx(0) - subCommitsContext.SetParentContext(self.context) - subCommitsContext.SetWindowName(self.context.GetWindowName()) - subCommitsContext.SetTitleRef(utils.TruncateWithEllipsis(ref.RefName(), 50)) - subCommitsContext.SetRef(ref) - subCommitsContext.SetLimitCommits(true) - subCommitsContext.SetShowBranchHeads(self.context.ShowBranchHeadsInSubCommits()) - subCommitsContext.ClearSearchString() - subCommitsContext.GetView().ClearSearch() - - err = self.c.PostRefreshUpdate(self.c.Contexts().SubCommits) - if err != nil { - return err - } - - return self.c.PushContext(self.c.Contexts().SubCommits) + return self.c.Helpers().SubCommits.ViewSubCommits(helpers.ViewSubCommitsOpts{ + Ref: ref, + Context: self.context, + ShowBranchHeads: self.context.ShowBranchHeadsInSubCommits(), + }) } func (self *SwitchToSubCommitsController) Context() types.Context { |