summaryrefslogtreecommitdiffstats
path: root/pkg/gui/controllers/commit_message_controller.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/gui/controllers/commit_message_controller.go')
-rw-r--r--pkg/gui/controllers/commit_message_controller.go79
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()
+}