summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefan Haller <stefan@haller-berlin.de>2023-08-05 11:19:16 +0200
committerStefan Haller <stefan@haller-berlin.de>2023-08-29 08:16:40 +0200
commite8fac6ca7360faf5db1c82af2b2e9c87aa5a5edc (patch)
treeff9d9f469cf796f88bcd209f72005be2537cab1e
parent4de3fadb00e3829bcda3ae2d4379251c6a81c0a8 (diff)
Extract a SubCommitsHelper from SwitchToSubCommitsController
We want to use it from BranchesController too.
-rw-r--r--pkg/gui/controllers.go21
-rw-r--r--pkg/gui/controllers/helpers/helpers.go2
-rw-r--r--pkg/gui/controllers/helpers/sub_commits_helper.go69
-rw-r--r--pkg/gui/controllers/switch_to_sub_commits_controller.go47
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 {