diff options
Diffstat (limited to 'pkg/gui/controllers/commit_message_controller.go')
-rw-r--r-- | pkg/gui/controllers/commit_message_controller.go | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/pkg/gui/controllers/commit_message_controller.go b/pkg/gui/controllers/commit_message_controller.go new file mode 100644 index 000000000..6992e1eee --- /dev/null +++ b/pkg/gui/controllers/commit_message_controller.go @@ -0,0 +1,79 @@ +package controllers + +import ( + "github.com/jesseduffield/lazygit/pkg/gui/types" +) + +type CommitMessageController struct { + baseController + *controllerCommon + + getCommitMessage func() string + onCommitAttempt func(message string) + onCommitSuccess func() +} + +var _ types.IController = &CommitMessageController{} + +func NewCommitMessageController( + common *controllerCommon, + getCommitMessage func() string, + onCommitAttempt func(message string), + onCommitSuccess func(), +) *CommitMessageController { + return &CommitMessageController{ + baseController: baseController{}, + controllerCommon: common, + + getCommitMessage: getCommitMessage, + onCommitAttempt: onCommitAttempt, + onCommitSuccess: onCommitSuccess, + } +} + +func (self *CommitMessageController) GetKeybindings(opts types.KeybindingsOpts) []*types.Binding { + bindings := []*types.Binding{ + { + Key: opts.GetKey(opts.Config.Universal.SubmitEditorText), + Handler: self.handleCommitConfirm, + }, + { + Key: opts.GetKey(opts.Config.Universal.Return), + Handler: self.handleCommitClose, + }, + } + + return bindings +} + +func (self *CommitMessageController) Context() types.Context { + return self.context() +} + +// this method is pointless in this context but I'm keeping it consistent +// with other contexts so that when generics arrive it's easier to refactor +func (self *CommitMessageController) context() types.Context { + return self.contexts.CommitMessage +} + +func (self *CommitMessageController) handleCommitConfirm() error { + message := self.getCommitMessage() + self.onCommitAttempt(message) + + if message == "" { + return self.c.ErrorMsg(self.c.Tr.CommitWithoutMessageErr) + } + + cmdObj := self.git.Commit.CommitCmdObj(message) + self.c.LogAction(self.c.Tr.Actions.Commit) + + _ = self.c.PopContext() + return self.helpers.GPG.WithGpgHandling(cmdObj, self.c.Tr.CommittingStatus, func() error { + self.onCommitSuccess() + return nil + }) +} + +func (self *CommitMessageController) handleCommitClose() error { + return self.c.PopContext() +} |