summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/local_commits_controller.go
diff options
context:
space:
mode:
authorJesse Duffield <jessedduffield@gmail.com>2022-01-30 20:03:08 +1100
committerJesse Duffield <jessedduffield@gmail.com>2022-03-17 19:13:40 +1100
commit0a8cff6ab68dc92b98136c4ebe5c6bc7f8f1b3c7 (patch)
treea68b6ffa7a886d73346f6305c76db0ffe54cbe7b /pkg/gui/controllers/local_commits_controller.go
parente2f5fe101621c0162791d6ea312ef8093616f59c (diff)
some more refactoring
Diffstat (limited to 'pkg/gui/controllers/local_commits_controller.go')
-rw-r--r--pkg/gui/controllers/local_commits_controller.go71
1 files changed, 57 insertions, 14 deletions
diff --git a/pkg/gui/controllers/local_commits_controller.go b/pkg/gui/controllers/local_commits_controller.go
index 9e1cacca7..3e30619be 100644
--- a/pkg/gui/controllers/local_commits_controller.go
+++ b/pkg/gui/controllers/local_commits_controller.go
@@ -24,17 +24,19 @@ type (
)
type LocalCommitsController struct {
- c *types.ControllerCommon
- getContext func() types.IListContext
- os *oscommands.OSCommand
- git *commands.GitCommand
- tagsHelper *TagsHelper
- refsHelper IRefsHelper
+ c *types.ControllerCommon
+ getContext func() types.IListContext
+ os *oscommands.OSCommand
+ git *commands.GitCommand
+ tagsHelper *TagsHelper
+ refsHelper IRefsHelper
+ cherryPickHelper *CherryPickHelper
+ rebaseHelper *RebaseHelper
getSelectedLocalCommit func() *models.Commit
getCommits func() []*models.Commit
getSelectedLocalCommitIdx func() int
- checkMergeOrRebase CheckMergeOrRebase
+ CheckMergeOrRebase CheckMergeOrRebase
pullFiles PullFilesFn
getHostingServiceMgr GetHostingServiceMgrFn
switchToCommitFilesContext SwitchToCommitFilesContextFn
@@ -54,10 +56,12 @@ func NewLocalCommitsController(
git *commands.GitCommand,
tagsHelper *TagsHelper,
refsHelper IRefsHelper,
+ cherryPickHelper *CherryPickHelper,
+ rebaseHelper *RebaseHelper,
getSelectedLocalCommit func() *models.Commit,
getCommits func() []*models.Commit,
getSelectedLocalCommitIdx func() int,
- checkMergeOrRebase CheckMergeOrRebase,
+ CheckMergeOrRebase CheckMergeOrRebase,
pullFiles PullFilesFn,
getHostingServiceMgr GetHostingServiceMgrFn,
switchToCommitFilesContext SwitchToCommitFilesContextFn,
@@ -74,10 +78,12 @@ func NewLocalCommitsController(
git: git,
tagsHelper: tagsHelper,
refsHelper: refsHelper,
+ cherryPickHelper: cherryPickHelper,
+ rebaseHelper: rebaseHelper,
getSelectedLocalCommit: getSelectedLocalCommit,
getCommits: getCommits,
getSelectedLocalCommitIdx: getSelectedLocalCommitIdx,
- checkMergeOrRebase: checkMergeOrRebase,
+ CheckMergeOrRebase: CheckMergeOrRebase,
pullFiles: pullFiles,
getHostingServiceMgr: getHostingServiceMgr,
switchToCommitFilesContext: switchToCommitFilesContext,
@@ -160,6 +166,27 @@ func (self *LocalCommitsController) Keybindings(
Handler: self.checkSelected(self.handleCommitRevert),
Description: self.c.Tr.LcRevertCommit,
},
+ {
+ Key: getKey(config.Universal.New),
+ Modifier: gocui.ModNone,
+ Handler: self.checkSelected(self.newBranch),
+ Description: self.c.Tr.LcCreateNewBranchFromCommit,
+ },
+ {
+ Key: getKey(config.Commits.CherryPickCopy),
+ Handler: self.checkSelected(self.copy),
+ Description: self.c.Tr.LcCherryPickCopy,
+ },
+ {
+ Key: getKey(config.Commits.CherryPickCopyRange),
+ Handler: self.checkSelected(self.copyRange),
+ Description: self.c.Tr.LcCherryPickCopyRange,
+ },
+ {
+ Key: getKey(config.Commits.PasteCommits),
+ Handler: guards.OutsideFilterMode(self.paste),
+ Description: self.c.Tr.LcPasteCommits,
+ },
// overriding these navigation keybindings because we might need to load
// more commits on demand
{
@@ -380,7 +407,7 @@ func (self *LocalCommitsController) pick() error {
func (self *LocalCommitsController) interactiveRebase(action string) error {
err := self.git.Rebase.InteractiveRebase(self.getCommits(), self.getSelectedLocalCommitIdx(), action)
- return self.checkMergeOrRebase(err)
+ return self.CheckMergeOrRebase(err)
}
// handleMidRebaseCommand sees if the selected commit is in fact a rebasing
@@ -448,7 +475,7 @@ func (self *LocalCommitsController) handleCommitMoveDown() error {
// TODO: use MoveSelectedLine
_ = self.getContext().HandleNextLine()
}
- return self.checkMergeOrRebase(err)
+ return self.CheckMergeOrRebase(err)
})
}
@@ -483,7 +510,7 @@ func (self *LocalCommitsController) handleCommitMoveUp() error {
if err == nil {
_ = self.getContext().HandlePrevLine()
}
- return self.checkMergeOrRebase(err)
+ return self.CheckMergeOrRebase(err)
})
}
@@ -495,7 +522,7 @@ func (self *LocalCommitsController) handleCommitAmendTo() error {
return self.c.WithWaitingStatus(self.c.Tr.AmendingStatus, func() error {
self.c.LogAction(self.c.Tr.Actions.AmendCommit)
err := self.git.Rebase.AmendTo(self.getSelectedLocalCommit().Sha)
- return self.checkMergeOrRebase(err)
+ return self.CheckMergeOrRebase(err)
})
},
})
@@ -601,7 +628,7 @@ func (self *LocalCommitsController) handleSquashAllAboveFixupCommits(commit *mod
return self.c.WithWaitingStatus(self.c.Tr.SquashingStatus, func() error {
self.c.LogAction(self.c.Tr.Actions.SquashAllAboveFixupCommits)
err := self.git.Rebase.SquashAllAboveFixupCommits(commit.Sha)
- return self.checkMergeOrRebase(err)
+ return self.CheckMergeOrRebase(err)
})
},
})
@@ -781,3 +808,19 @@ func (self *LocalCommitsController) checkSelected(callback func(*models.Commit)
func (self *LocalCommitsController) Context() types.Context {
return self.getContext()
}
+
+func (self *LocalCommitsController) newBranch(commit *models.Commit) error {
+ return self.refsHelper.NewBranch(commit.RefName(), commit.Description(), "")
+}
+
+func (self *LocalCommitsController) copy(commit *models.Commit) error {
+ return self.cherryPickHelper.Copy(commit, self.getCommits(), self.getContext())
+}
+
+func (self *LocalCommitsController) copyRange(*models.Commit) error {
+ return self.cherryPickHelper.CopyRange(self.getContext().GetPanelState().GetSelectedLineIdx(), self.getCommits(), self.getContext())
+}
+
+func (self *LocalCommitsController) paste() error {
+ return self.cherryPickHelper.Paste()
+}