mirror of
https://github.com/jesseduffield/lazygit.git
synced 2025-06-15 00:15:32 +02:00
Extract helper methods
We'll reuse them in the next commit.
This commit is contained in:
@ -9,6 +9,7 @@ import (
|
|||||||
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
"github.com/jesseduffield/lazygit/pkg/commands/models"
|
||||||
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
"github.com/jesseduffield/lazygit/pkg/commands/types/enums"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
"github.com/jesseduffield/lazygit/pkg/gui/context"
|
||||||
|
"github.com/jesseduffield/lazygit/pkg/gui/context/traits"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers"
|
"github.com/jesseduffield/lazygit/pkg/gui/controllers/helpers"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/keybindings"
|
"github.com/jesseduffield/lazygit/pkg/gui/keybindings"
|
||||||
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
"github.com/jesseduffield/lazygit/pkg/gui/style"
|
||||||
@ -532,10 +533,7 @@ func (self *LocalCommitsController) startInteractiveRebaseWithEdit(
|
|||||||
) error {
|
) error {
|
||||||
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
return self.c.WithWaitingStatus(self.c.Tr.RebasingStatus, func(gocui.Task) error {
|
||||||
self.c.LogAction(self.c.Tr.Actions.EditCommit)
|
self.c.LogAction(self.c.Tr.Actions.EditCommit)
|
||||||
selectedIdx, rangeStartIdx, rangeSelectMode := self.context().GetSelectionRangeAndMode()
|
selectionRangeAndMode := self.getSelectionRangeAndMode()
|
||||||
commits := self.c.Model().Commits
|
|
||||||
selectedHash := commits[selectedIdx].Hash
|
|
||||||
rangeStartHash := commits[rangeStartIdx].Hash
|
|
||||||
err := self.c.Git().Rebase.EditRebase(commitsToEdit[len(commitsToEdit)-1].Hash)
|
err := self.c.Git().Rebase.EditRebase(commitsToEdit[len(commitsToEdit)-1].Hash)
|
||||||
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebaseWithRefreshOptions(
|
return self.c.Helpers().MergeAndRebase.CheckMergeOrRebaseWithRefreshOptions(
|
||||||
err,
|
err,
|
||||||
@ -554,23 +552,41 @@ func (self *LocalCommitsController) startInteractiveRebaseWithEdit(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to select the same commit range again because after starting a rebase,
|
self.restoreSelectionRangeAndMode(selectionRangeAndMode)
|
||||||
// new lines can be added for update-ref commands in the TODO file, due to
|
|
||||||
// stacked branches. So the selected commits may be in different positions in the list.
|
|
||||||
_, newSelectedIdx, ok1 := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
|
||||||
return c.Hash == selectedHash
|
|
||||||
})
|
|
||||||
_, newRangeStartIdx, ok2 := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
|
||||||
return c.Hash == rangeStartHash
|
|
||||||
})
|
|
||||||
if ok1 && ok2 {
|
|
||||||
self.context().SetSelectionRangeAndMode(newSelectedIdx, newRangeStartIdx, rangeSelectMode)
|
|
||||||
}
|
|
||||||
return nil
|
return nil
|
||||||
}})
|
}})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type SelectionRangeAndMode struct {
|
||||||
|
selectedHash string
|
||||||
|
rangeStartHash string
|
||||||
|
mode traits.RangeSelectMode
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *LocalCommitsController) getSelectionRangeAndMode() SelectionRangeAndMode {
|
||||||
|
selectedIdx, rangeStartIdx, rangeSelectMode := self.context().GetSelectionRangeAndMode()
|
||||||
|
commits := self.c.Model().Commits
|
||||||
|
selectedHash := commits[selectedIdx].Hash
|
||||||
|
rangeStartHash := commits[rangeStartIdx].Hash
|
||||||
|
return SelectionRangeAndMode{selectedHash, rangeStartHash, rangeSelectMode}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (self *LocalCommitsController) restoreSelectionRangeAndMode(selectionRangeAndMode SelectionRangeAndMode) {
|
||||||
|
// We need to select the same commit range again because after starting a rebase,
|
||||||
|
// new lines can be added for update-ref commands in the TODO file, due to
|
||||||
|
// stacked branches. So the selected commits may be in different positions in the list.
|
||||||
|
_, newSelectedIdx, ok1 := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
||||||
|
return c.Hash == selectionRangeAndMode.selectedHash
|
||||||
|
})
|
||||||
|
_, newRangeStartIdx, ok2 := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
||||||
|
return c.Hash == selectionRangeAndMode.rangeStartHash
|
||||||
|
})
|
||||||
|
if ok1 && ok2 {
|
||||||
|
self.context().SetSelectionRangeAndMode(newSelectedIdx, newRangeStartIdx, selectionRangeAndMode.mode)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func (self *LocalCommitsController) findCommitForQuickStartInteractiveRebase() (*models.Commit, error) {
|
func (self *LocalCommitsController) findCommitForQuickStartInteractiveRebase() (*models.Commit, error) {
|
||||||
commit, index, ok := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
commit, index, ok := lo.FindIndexOf(self.c.Model().Commits, func(c *models.Commit) bool {
|
||||||
return c.IsMerge() || c.Status == models.StatusMerged
|
return c.IsMerge() || c.Status == models.StatusMerged
|
||||||
|
Reference in New Issue
Block a user