summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/helpers/sub_commits_helper.go
blob: c31d50937095de2f75d30a0eab0333a2e53791e7 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
	RefToShowDivergenceFrom string
	TitleRef                string
	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(),
			FilterAuthor:            self.c.Modes().Filtering.GetAuthor(),
			IncludeRebaseCommits:    false,
			RefName:                 opts.Ref.FullRefName(),
			RefForPushedStatus:      opts.Ref.FullRefName(),
			RefToShowDivergenceFrom: opts.RefToShowDivergenceFrom,
		},
	)
	if err != nil {
		return err
	}

	self.setSubCommits(commits)
	self.refreshHelper.RefreshAuthors(commits)

	subCommitsContext := self.c.Contexts().SubCommits
	subCommitsContext.SetSelection(0)
	subCommitsContext.SetParentContext(opts.Context)
	subCommitsContext.SetWindowName(opts.Context.GetWindowName())
	subCommitsContext.SetTitleRef(utils.TruncateWithEllipsis(opts.TitleRef, 50))
	subCommitsContext.SetRef(opts.Ref)
	subCommitsContext.SetRefToShowDivergenceFrom(opts.RefToShowDivergenceFrom)
	subCommitsContext.SetLimitCommits(true)
	subCommitsContext.SetShowBranchHeads(opts.ShowBranchHeads)
	subCommitsContext.ClearSearchString()
	subCommitsContext.GetView().ClearSearch()
	subCommitsContext.GetView().TitlePrefix = opts.Context.GetView().TitlePrefix

	err = self.c.PostRefreshUpdate(self.c.Contexts().SubCommits)
	if err != nil {
		return err
	}

	return self.c.PushContext(self.c.Contexts().SubCommits)
}