diff options
author | Jesse Duffield <jessedduffield@gmail.com> | 2023-03-23 11:51:40 +1100 |
---|---|---|
committer | Jesse Duffield <jessedduffield@gmail.com> | 2023-04-30 13:19:53 +1000 |
commit | 0c6ab4b43e96763088c1d19039a9c4eba81a25f1 (patch) | |
tree | 57027d427b207f95c0d5fb6378797bf935f93d5c /pkg/gui/modes | |
parent | 1b2fb34ffdee3be0f914380875f9cd89f8d51588 (diff) |
refactor cherry pick code to move state access out of helper
Diffstat (limited to 'pkg/gui/modes')
-rw-r--r-- | pkg/gui/modes/cherrypicking/cherry_picking.go | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/pkg/gui/modes/cherrypicking/cherry_picking.go b/pkg/gui/modes/cherrypicking/cherry_picking.go index bd5c6437a..1fd34d473 100644 --- a/pkg/gui/modes/cherrypicking/cherry_picking.go +++ b/pkg/gui/modes/cherrypicking/cherry_picking.go @@ -1,6 +1,8 @@ package cherrypicking import ( + "github.com/jesseduffield/generics/set" + "github.com/jesseduffield/generics/slices" "github.com/jesseduffield/lazygit/pkg/commands/models" ) @@ -18,6 +20,37 @@ func New() *CherryPicking { } } -func (m *CherryPicking) Active() bool { - return len(m.CherryPickedCommits) > 0 +func (self *CherryPicking) Active() bool { + return len(self.CherryPickedCommits) > 0 +} + +func (self *CherryPicking) SelectedShaSet() *set.Set[string] { + shas := slices.Map(self.CherryPickedCommits, func(commit *models.Commit) string { + return commit.Sha + }) + return set.NewFromSlice(shas) +} + +func (self *CherryPicking) Add(selectedCommit *models.Commit, commitsList []*models.Commit) { + commitSet := self.SelectedShaSet() + commitSet.Add(selectedCommit.Sha) + + self.update(commitSet, commitsList) +} + +func (self *CherryPicking) Remove(selectedCommit *models.Commit, commitsList []*models.Commit) { + commitSet := self.SelectedShaSet() + commitSet.Remove(selectedCommit.Sha) + + self.update(commitSet, commitsList) +} + +func (self *CherryPicking) update(selectedShaSet *set.Set[string], commitsList []*models.Commit) { + cherryPickedCommits := slices.Filter(commitsList, func(commit *models.Commit) bool { + return selectedShaSet.Includes(commit.Sha) + }) + + self.CherryPickedCommits = slices.Map(cherryPickedCommits, func(commit *models.Commit) *models.Commit { + return &models.Commit{Name: commit.Name, Sha: commit.Sha} + }) } |